0

我想了解是否可以在子类(.prototype)中重新定义对象(.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不起作用

4

1 回答 1

3

您似乎对如何Object.defineProperty工作感到困惑。您只需要调用definePropertyon 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/

于 2013-11-07T01:43:56.050 回答