簡體   English   中英

在Javascript中重新定義Object.defineProperty

[英]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工作方式感到困惑。 永遠只能調用definePropertyObject ,並在你所要定義的屬性的對象傳遞。 因此,您不需要這種魔術,因為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM