关于 __defineGetter__
和 __defineSetter__
的说明
__defineGetter__
和 __defineSetter__
是 JavaScript 中的两个方法,它们可以用于动态定义属性的 getter 和 setter 方法。在 ES5 中已经被废弃,建议使用 Object.defineProperty
来替代它们。
__defineGetter__
方法__defineGetter__
方法用于为对象动态添加 getter 方法。它接受两个参数:属性名称和 getter 方法。
const obj = {}
obj.__defineGetter__('foo', function(){
return 42
})
console.log(obj.foo) // 42
上面的例子中,我们动态定义了一个属性 foo
,它的 getter 方法始终返回 42。此时,当我们访问 obj.foo
时,会自动调用定义的 getter 方法并返回其返回值。
__defineSetter__
方法__defineSetter__
方法用于为对象动态添加 setter 方法。它接受两个参数:属性名称和 setter 方法。
const obj = {}
obj.__defineSetter__('foo', function(value){
this._foo = value * 2
})
obj.foo = 21
console.log(obj._foo) // 42
上面的例子中,我们动态定义了一个属性 foo
,它的 setter 方法将传入的参数乘以 2 并赋值给 _foo
属性。此时,当我们设置 obj.foo
的值时,会自动调用定义的 setter 方法并将传入的值作为参数传递给方法。
Object.defineProperty
方法Object.defineProperty
是 ES5 中推出的一个方法,用于为对象动态定义属性的 getter、setter 方法以及一些其他属性。它接受三个参数:属性所属的对象、属性名称、属性描述符对象。
const obj = {}
Object.defineProperty(obj, 'foo', {
get: function() {
return 42
},
set: function(value) {
this._foo = value * 2
}
})
console.log(obj.foo) // 42
obj.foo = 21
console.log(obj._foo) // 42
上面的例子中,我们使用 Object.defineProperty
定义了一个属性 foo
,它的 getter 方法和 setter 方法分别返回 42 和将传入的值乘以 2。此时,当我们访问 obj.foo
或设置 obj.foo
的值时,会自动调用定义的 getter 或 setter 方法。
总之,__defineGetter__
和 __defineSetter__
的作用与 Object.defineProperty
类似,区别在于它们是被废弃的方法,建议使用 Object.defineProperty
来替代。
本文链接:http://task.lmcjl.com/news/10349.html