在Javascript中重新定义Object.defineProperty

在Javascript中重新定义Object.defineProperty,javascript,prototype,setter,Javascript,Prototype,Setter,我想了解是否可以在子类(.prototype)中重新定义对象(.prototype)的“defineProperty”函数,以便setter不仅设置属性的值,还可以执行其他方法 我试过这样的方法: Myclass.prototype.defineProperty = function (obj, prop, meth) { Object.defineProperty.call(this, obj, prop, { get: function () {

我想了解是否可以在子类(.prototype)中重新定义对象(.prototype)的“defineProperty”函数,以便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
的工作原理感到困惑。您只能对
对象
调用
定义属性
,然后传入要定义其属性的对象。所以您不需要这种魔力,因为类的实例上根本不存在
defineProperty

var obj = {a:123};

Object.defineProperty(obj, 'foo');
// works fine!

obj.defineProperty('foo');
// TypeError: Object #<Object> has no method 'defineProperty'
请注意这一行:

Object.defineProperty(this, prop, {
我们传入想要属性的对象(
this
),以及属性的名称(
prop
)。然后是setter/getter对象。根本不需要覆盖任何内容。提供一个允许对象声明其自身属性的方法很简单


请参见此处的工作示例:

您似乎对
Object.defineProperty
的工作原理感到困惑。您只能对
对象
调用
定义属性
,然后传入要定义其属性的对象。所以您不需要这种魔力,因为类的实例上根本不存在
defineProperty

var obj = {a:123};

Object.defineProperty(obj, 'foo');
// works fine!

obj.defineProperty('foo');
// TypeError: Object #<Object> has no method 'defineProperty'
请注意这一行:

Object.defineProperty(this, prop, {
我们传入想要属性的对象(
this
),以及属性的名称(
prop
)。然后是setter/getter对象。根本不需要覆盖任何内容。提供一个允许对象声明其自身属性的方法很简单


请参见此处的工作示例:

您似乎对
Object.defineProperty
的工作原理感到困惑。您只能对
对象
调用
定义属性
,然后传入要定义其属性的对象。所以您不需要这种魔力,因为类的实例上根本不存在
defineProperty

var obj = {a:123};

Object.defineProperty(obj, 'foo');
// works fine!

obj.defineProperty('foo');
// TypeError: Object #<Object> has no method 'defineProperty'
请注意这一行:

Object.defineProperty(this, prop, {
我们传入想要属性的对象(
this
),以及属性的名称(
prop
)。然后是setter/getter对象。根本不需要覆盖任何内容。提供一个允许对象声明其自身属性的方法很简单


请参见此处的工作示例:

您似乎对
Object.defineProperty
的工作原理感到困惑。您只能对
对象
调用
定义属性
,然后传入要定义其属性的对象。所以您不需要这种魔力,因为类的实例上根本不存在
defineProperty

var obj = {a:123};

Object.defineProperty(obj, 'foo');
// works fine!

obj.defineProperty('foo');
// TypeError: Object #<Object> has no method 'defineProperty'
请注意这一行:

Object.defineProperty(this, prop, {
我们传入想要属性的对象(
this
),以及属性的名称(
prop
)。然后是setter/getter对象。根本不需要覆盖任何内容。提供一个允许对象声明其自身属性的方法很简单


请参阅此处的工作示例:

为什么要这样做?定义“不工作”。它是否不像预期的那样工作,一点也不,抛出一个错误……它到底有什么不值得担心的呢?发生了什么而不是你期望的?您如何调用此代码?为什么要这样做?定义“不起作用”。它是否不像预期的那样工作,一点也不,抛出一个错误……它到底有什么不值得担心的呢?发生了什么而不是你期望的?您如何调用此代码?为什么要这样做?定义“不起作用”。它是否不像预期的那样工作,一点也不,抛出一个错误……它到底有什么不值得担心的呢?发生了什么而不是你期望的?您如何调用此代码?为什么要这样做?定义“不起作用”。它是否不像预期的那样工作,一点也不,抛出一个错误……它到底有什么不值得担心的呢?发生了什么而不是你期望的?你是如何调用这段代码的?看来我确实忽略了Object.defineProperty方法的一点。我真正想的是每次为对象定义新属性时,都会在幕后调用defineProperty。如果是这样,我想做的是重新打开“Object”类并重新定义方法。
defineProperty
在创建属性时不会被调用。您可以调用
Object.defineProperty
来创建具有自定义行为的对象的属性。您可以通过获得回调,但我相信目前对回调的支持有点不常见。似乎我确实忽略了Object.defineProperty方法的一点。我真正想的是每次为对象定义新属性时,都会在幕后调用defineProperty。如果是这样,我想做的是重新打开“Object”类并重新定义方法。
defineProperty
在创建属性时不会被调用。您可以调用
Object.defineProperty
来创建具有自定义行为的对象的属性。您可以通过获得回调,但我相信目前对回调的支持有点不常见。似乎我确实忽略了Object.defineProperty方法的一点。我真正想的是每次为对象定义新属性时,都会在幕后调用defineProperty。如果是这样,我想做的是重新打开“Object”类并重新定义方法。
defineProperty
在创建属性时不会被调用。您可以调用
Object.defineProperty
来创建具有自定义行为的对象的属性。您可以通过获得回调,但我相信目前对回调的支持有点不常见。似乎我确实忽略了Object.defineProperty方法的一点。我真正想的是每次为对象定义新属性时,都会在幕后调用defineProperty。如果是这样,我想做的是重新打开“Object”类并重新定义方法。
defineProperty
在创建属性时不会被调用。您可以调用
Object.defineProperty
来创建对象的属性