![](/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.