在 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);

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