使用对象 您所在的位置:网站首页 less定义对象 使用对象

使用对象

2024-05-08 04:12| 来源: 网络整理| 查看: 265

一个 getter 是一个获取某个特定属性的值的方法。一个 setter 是一个设定某个属性的值的方法。你可以为预定义的或用户定义的对象定义 getter 和 setter 以支持新增的属性。定义 getter 和 setter 的语法采用对象字面量语法。

下面例子描述了 getter 和 setter 是如何为用户定义的对象 o 工作的。

jsvar o = { a: 7, get b() { return this.a + 1; }, set c(x) { this.a = x / 2; }, }; console.log(o.a); // 7 console.log(o.b); // 8 o.c = 50; console.log(o.a); // 25

o 对象的属性如下:

o.a — 数字 o.b — 返回 o.a + 1 的 getter o.c — 由 o.c 的值所设置 o.a 值的 setter

请注意在一个对象字面量语法中定义 getter 和 setter 使用"[gs]et property()"的方式(相比较于__define[GS]etter__) 时,并不是获取和设置某个属性自身,容易让人误以为是"[gs]et propertyName(){ }"这样错误的使用方法。定义一个 getter 或 setter 函数使用语法"[gs]et property()",定义一个已经声明的函数作为的 getter 和 setter 方法,使用Object.defineProperty(或者 Object.prototype.__defineGetter__ 旧语法回退)

下面这个例子展示使用 getter 和 setter 方法扩展 Date原型,为预定义好的 Date 类添加一个 year 的属性。定义属性 year 的 getter 和 setter 方法用到了 Date 类中已存在的 getFullYear 和 setFullYear 方法。

定义属性 year 的 getter 和 setter:

jsvar d = Date.prototype; Object.defineProperty(d, "year", { get: function () { return this.getFullYear(); }, set: function (y) { this.setFullYear(y); }, });

通过一个 Date 对象使用 getter 和 setter:

jsvar now = new Date(); console.log(now.year); // 2000 now.year = 2001; // 987617605170 console.log(now); // Wed Apr 18 11:13:25 GMT-0700 (Pacific Daylight Time) 2001

原则上,getter 和 setter 既可以:

使用 使用对象初始化器 定义 也可以之后随时使用 getter 和 setter 添加方法添加到任何对象

当使用 使用对象初始化器 的方式定义 getter 和 setter 时,只需要在 getter 方法前加 get,在 setter 方法前加 set,当然,getter 方法必须是无参数的,setter 方法只接受一个参数 (设置为新值),例如:

jsvar o = { a: 7, get b() { return this.a + 1; }, set c(x) { this.a = x / 2; }, };

使用 Object.defineProperties 的方法,同样也可以对一个已创建的对象在任何时候为其添加 getter 或 setter 方法。这个方法的第一个参数是你想定义 getter 或 setter 方法的对象,第二个参数是一个对象,这个对象的属性名用作 getter 或 setter 的名字,属性名对应的属性值用作定义 getter 或 setter 方法的函数,下面是一个例子定义了和前面例子一样的 getter 和 setter 方法:

jsvar o = { a: 0 }; Object.defineProperties(o, { b: { get: function () { return this.a + 1; }, }, c: { set: function (x) { this.a = x / 2; }, }, }); o.c = 10; // Runs the setter, which assigns 10 / 2 (5) to the 'a' property console.log(o.b); // Runs the getter, which yields a + 1 or 6

这两种定义方式的选择取决于你的编程风格和手头的工作量。当你定义一个原型准备进行初始化时,可以选择第一种方式,这种方式更简洁和自然。但是,当你需要添加 getter 和 setter 方法——因为并没有编写原型或者特定的对象——使用第二种方式更好。第二种方式可能更能表现 JavaScript 语法的动态特性——但也会使代码变得难以阅读和理解。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有