一种是获取特定属性值的方法。 一种是设置属性值的方法。 您可以为预定义或用户定义的对象定义和支持新属性。 定义 sum 的语法使用对象字面量语法。
以下示例描述了用户定义对象 o 的工作原理。
js
var 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 对象的属性如下:
请注意,在对象字面量语法中定义和使用“[gs]et ()”时(与[GS]相比),它本身并不会获取和设置属性,这很容易被误认为是“[ gs]et ( ){ }" 是一个错误的用法。 要定义 OR 函数,请使用语法“[gs]et ()”,要将已声明的函数定义为 AND 方法,请使用(或回退到旧语法)
以下示例演示如何使用 和 方法扩展原型,以将年份属性添加到预定义的 Date 类。 定义属性年份的 sum 方法使用 Date 类中现有的 sum 方法。
定义属性年份的总和:
js
var d = Date.prototype;
Object.defineProperty(d, "year", {
get: function () {
return this.getFullYear();
},
set: function (y) {
this.setFullYear(y);
},
});
使用 Date 对象并且:
js
var 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
原则上,并且可以:
使用方法定义sum时,只需在方法前添加get,在方法前添加set即可。 当然,该方法必须是无参数的,并且该方法只接受一个参数(设置为一个新值),例如:
js
var o = {
a: 7,
get b() {
return this.a + 1;
},
set c(x) {
this.a = x / 2;
},
};
使用 。 方法,您还可以随时向创建的对象添加或方法。 该方法的第一个参数是要定义的对象或方法。 第二个参数是一个对象。 该对象的属性名称用作 或 方法的名称。 属性名对应的属性值作为定义或方法的功能。 如下是一个示例,定义了与前面示例相同的 和 方法:
js
var 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
这两个定义之间的选择取决于您的编程风格和手头的工作量。 当定义要初始化的原型时,可以选择第一种方法,更加简洁自然。 但是,当您需要添加方法时(因为您没有编写原型或特定对象),最好使用第二种方法。 第二种方式可能更好地表达语法的动态性质 - 但它也使代码难以阅读和理解。