Я использую прототипное наследование 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: При желании я добавил еще несколько кода.
@ «Если это так, то почему бы вам не просто установить опоры для А, как свою собственность?»: Не уверен, если я понимаю, это правильно , A и B являются «классами» с их методами/свойствами, определенными в прототипе. Мне нужно создать экземпляр обоих. – Milad
Забудьте об этом, кажется, что я принял совершенно другой код;). – Teemu
Вы, случайно, сделали следующее: myObj .prop = 10 –