在 Object.defineProperty 中调用 parents 实现
Call parents implementation in Object.defineProperty
我使用 javascript 原型继承,其中 A "inherits" B。B 使用 defineProperty
为 属性 prop
定义一个 setter。在 A 中,我想覆盖此行为:
Function.prototype.inherits = function (parent)
{
this.prototype = Object.create(parent.prototype);
this.prototype.constructor = parent;
};
// --------------------------------------------
var B = function()
{
this.myProp = 0;
};
Object.defineProperty( B.prototype
, 'prop'
, {
set: function(val)
{
this.myProp = val;
}
});
// --------------------------------------------
var A = function(){};
A.inherits(B);
Object.defineProperty( A.prototype
, 'prop'
, {
set: function(val)
{
// Do some custom code...
// call base implementation
B.prototype.prop = val; // Does not work!
}
});
// --------------------------------------------
var myObj = new A();
myObj.prop = 10;
调用基本实现不会以这种方式工作,因为 this
指针将是错误的。我需要调用类似 B.prototype.prop.set.call(this, val);
的方法来修复它,但这不起作用。
如有任何想法,将不胜感激!
编辑:根据需要,我添加了更多代码。
我相信你可以使用:
Object.getOwnPropertyDescriptor(B.prototype, 'prop').set.call(this, val);
我使用 javascript 原型继承,其中 A "inherits" B。B 使用 defineProperty
为 属性 prop
定义一个 setter。在 A 中,我想覆盖此行为:
Function.prototype.inherits = function (parent)
{
this.prototype = Object.create(parent.prototype);
this.prototype.constructor = parent;
};
// --------------------------------------------
var B = function()
{
this.myProp = 0;
};
Object.defineProperty( B.prototype
, 'prop'
, {
set: function(val)
{
this.myProp = val;
}
});
// --------------------------------------------
var A = function(){};
A.inherits(B);
Object.defineProperty( A.prototype
, 'prop'
, {
set: function(val)
{
// Do some custom code...
// call base implementation
B.prototype.prop = val; // Does not work!
}
});
// --------------------------------------------
var myObj = new A();
myObj.prop = 10;
调用基本实现不会以这种方式工作,因为 this
指针将是错误的。我需要调用类似 B.prototype.prop.set.call(this, val);
的方法来修复它,但这不起作用。
如有任何想法,将不胜感激!
编辑:根据需要,我添加了更多代码。
我相信你可以使用:
Object.getOwnPropertyDescriptor(B.prototype, 'prop').set.call(this, val);