百度,蓦然回首,那人却在灯火阑珊处。人生三从境界:昨夜西风凋碧树,独上高楼,望尽天涯路。衣带渐宽终不悔,为伊消得人憔悴。众里寻他千

表示2D笛卡儿坐标点的对象

这个对象用普通数据属性保存点的x和y坐标,用访问器属性给出与这个点等价的极坐标:

let p = {
    // x和y是常规的可读写数据属性
    x: 1.0,
    y: 1.0,
    
    // r是由获取方法和设置方法定义的可读写访问器属性
    // 不要忘了访问器方法后面的逗号。
    get r() { return Math.hypot(this.x, this.y); },
    set r(newvalue) {
        let oldvalue = Math.hypot(this.x, this.y);
        let ratio = newvalue/oldvalue;
        this.x *= ratio;
        this.y *= ratio;
    },
    
    // theta是一个只定义了获取方法的只读访问器属性
    get theta() { return Math.atan2(this.y, this.x); }
};
p.r     // => Math.SQRT2
p.theta // => Math.PI / 4

注意这个示例的获取和设置方法中使用了关键字this。JavaScript会将这些函数作为定义它们的对象的方法来调用。这意味着这些函数体内,this引用的是表示坐标点的对象p。因此访问器属性r的获取方法可以通过this.x和this.y来引用坐标点的x和y属性。

与数据属性一样,访问器属性也是可以继承的。因此,可以把上面定义的对象p作为其他点的原型。可以给新对象定义自己的x和y属性,而它们将继承r和theta属性:

let q = Object.create(p); // 一个继承获取和设置方法的新对象
q.x = 3; q.y = 4;         // 创建q的自有数据属性
q.r                       // => 5: 可以使用继承的访问器属性
q.theta                   // => Math.atan2(4, 3)

以上代码使用访问器属性定义了一个API,提供了一个数据集的两种表示(笛卡儿坐标和极坐标)。

posted @   0a  阅读(52)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现

喜欢请打赏

扫描二维码打赏

了解更多

点击右上角即可分享
微信分享提示
人间忽晚,山河已秋。
剑桥
17°
00:13发布
剑桥
00:13发布
17°
西南风
5级
空气质量
相对湿度
80%
今天
小雨
10°/21°
周二
大雨
8°/15°
周三
小雨
6°/14°