Copying Javascript getters/setters to another prototype object

// Base class
var Base = function() {
    this._value = 'base';
};
Base.prototype = {
    constructor: Base,
    // By function
    getValue: function() {
        return this._value;
    },
    // By getter
    get value() {
        return this._value;
    }
};

// Sub class extends Base
var Sub = function() {
    this._value = 'sub';
};
Sub.prototype = {
    constructor: Sub
};
// Pass over methods
Sub.prototype.getValue = Base.prototype.getValue;
Sub.prototype.value = Base.prototype.value;

// ---

var mySub = new Sub();
alert(mySub.getValue()); // Returns 'sub'
alert(mySub.value);      // Returns 'undefined'

На первый взгляд кажется, что mySub.value должен возвращать то же самое, что и mySub.getValue (), но, как вы можете видеть, вместо этого возвращает undefined. Очевидно, что геттер не находит родительскую область в качестве экземпляра Sub (mySub), а скорее несуществующий базовый экземпляр.

Есть ли какой-либо способ обойти это, кроме необходимости назначать те же геттеры на новый прототип?

8
задан Tom van der Woerdt 28 December 2011 в 22:41
поделиться