在 Javascript 中重新定义 Object.defineProperty

Redefine Object.defineProperty in Javascript

本文关键字:定义 Object defineProperty Javascript 新定义      更新时间:2023-09-26

我想了解是否可以在子类(.prototype)中重新定义Object(.prototype)的"definePropery"函数,以便setter不仅可以设置属性的值,还可以执行其他方法。

我尝试过这样的事情:

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的工作方式感到困惑。你只Object上调用defineProperty,然后传入要定义其属性的对象。 所以你不需要这个魔法,因为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/