在Object.defineProperty中调用parent实现

时间:2015-02-13 16:44:13

标签: javascript inheritance prototypal-inheritance defineproperty

我使用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);之类的东西来修复它,但这不起作用。

任何想法都会很棒!

编辑:根据需要,我添加了更多代码。

1 个答案:

答案 0 :(得分:1)

我相信你可以使用:

Object.getOwnPropertyDescriptor(B.prototype, 'prop').set.call(this, val);

http://jsbin.com/topaqe/1/edit