![](/img/trans.png)
[英]Strange behavior of Object.defineProperty() in JavaScript
[英]Redefine Object.defineProperty in Javascript
我想学习是否有可能在子类(.prototype)中重新定义Object(.prototype)的“ definePropery”函数,以便设置器不仅设置属性的值,而且例如执行其他方法。
我已经尝试过类似的方法:
Myclass.prototype.defineProperty = function (obj, prop, meth) {
Object.defineProperty.call(this, obj, prop, {
get: function () {
return obj[prop]
},
set: function () {
obj[prop] = n;
alert("dev")
}
})
}
但是ID不起作用
您似乎对Object.defineProperty
工作方式感到困惑。 你永远只能调用defineProperty
的Object
,并在你所要定义的属性的对象传递。 因此,您不需要这种魔术,因为defineProperty
在类的实例上根本不存在。
var obj = {a:123};
Object.defineProperty(obj, 'foo');
// works fine!
obj.defineProperty('foo');
// TypeError: Object #<Object> has no method 'defineProperty'
但这意味着您可以添加它,没问题:
Myclass.prototype.defineProperty = function (obj, prop, meth) {
Object.defineProperty(this, prop, {
get: function () {
return obj[prop]
},
set: function (n) {
obj[prop] = n;
alert("dev")
}
})
}
注意这一行:
Object.defineProperty(this, prop, {
我们传入需要属性的对象( this
)和属性名称( prop
)。 然后是setter / getter对象。 根本不需要覆盖任何内容。 您只需提供一种允许对象声明其自身属性的方法即可。
在这里查看工作示例: http : //jsfiddle.net/TeZ82/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.