0

Я использую прототипное наследование javascript, где «наследует» B. B использует defineProperty, чтобы определить средство настройки для свойства prop. В А я хочу, чтобы переопределить это поведение:Выполнение вызова родительских объектов в Object.defineProperty

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);, чтобы исправить это, но это не сработает.

Будем рады любым идеям!

EDIT: При желании я добавил еще несколько кода.

+0

@ «Если это так, то почему бы вам не просто установить опоры для А, как свою собственность?»: Не уверен, если я понимаю, это правильно , A и B являются «классами» с их методами/свойствами, определенными в прототипе. Мне нужно создать экземпляр обоих. – Milad

+0

Забудьте об этом, кажется, что я принял совершенно другой код;). – Teemu

+0

Вы, случайно, сделали следующее: myObj .prop = 10 –

ответ