我使用javascript原型继承,其中A"继承" 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);
之类的东西来修复它,但这不起作用。
任何想法都会很棒!
编辑:根据需要,我添加了更多代码。
答案 0 :(得分:1)
我相信你可以使用:
Object.getOwnPropertyDescriptor(B.prototype, 'prop').set.call(this, val);