В основном то, что я пытаюсь сделать, это то, что уже обсуждалось много раз.Однако в большинстве примеров только ClassA наследуется от ClassB.Моя ситуация довольно тривиальна, но, похоже, она не рассматривается в темах JavaScript, которые я нашел.
ClassB расширяет ClassA, в котором есть член.ClassC и ClassD расширяют ClassB.Однако при установке единственного члена в экземпляре ClassC этот член также устанавливается в членах ClassD.Давайте рассмотрим пример:
function ClassA(data) {
var This = this;
This._data = {};
This._construct = function(data) {
if( undefined === data ) {
This._data = {};
return true;
}
This._data = data;
}
This._construct(data);
}
function ClassB() {
}
ClassB.prototype = new ClassA();
ClassB.prototype.constructor = ClassB;
function ClassC() { // Extends ClassB
}
ClassC.prototype = new ClassB();
ClassC.prototype.constructor = ClassC;
function ClassD() { // Extends ClassB
}
ClassD.prototype = new ClassB();
ClassD.prototype.constructor = ClassD;
var objectC = new ClassC();
var objectD = new ClassD();
objectC._data['somevar'] = 'asdasdasd';
console.log(objectC._data); // Object { somevar="asdasdasd"}
console.log(objectD._data); // Object { somevar="asdasdasd"}
Если вы установите точку останова на строке console.log(objectC._data);
, вы можете увидеть в окне Watch FireBug, что все прототипы установлены правильно.Это действительно странно, потому что ясно, что прототипы ClassC и ClassD - это отдельные экземпляры, созданные с помощью ключевого слова new
, и поэтому они не должны совместно использовать членов.Может кто-нибудь объяснить, пожалуйста?
Функция _construct()
может быть удалена из ClassA, без эффекта.Строка var This = this
может быть удалена, и все последующие ссылки на This
могут быть изменены на this
, без эффекта.