Когда я делаю наследование в JS, я нахожу дополнительные свойства в производных классах, которые являются дубликатами свойств базового класса; Я не могу догадаться, как заставить производный класс использовать свойства базового класса. Мне нужно немного подтолкнуть в правильном направлении, чтобы я мог исправить свою модель наследования или чтобы я мог изменить способ использования прототипного наследования.
Допустим, я начинаю с этой типичной функции наследования:
Function.prototype.inheritsFrom = function( parentClassOrObject ){
if ( parentClassOrObject.constructor == Function ) {
this.prototype = new parentClassOrObject; //Normal Inheritance
this.prototype.constructor = this;
this.prototype.parent = parentClassOrObject.prototype;
} else {
this.prototype = parentClassOrObject; //Pure Virtual Inheritance
this.prototype.constructor = this;
this.prototype.parent = parentClassOrObject;
}
return this;
};
Вы, наверное, видели это раньше. Теперь я создаю следующее наследование:
function base() {
this.id = 0;
};
base.prototype.init = function ( _id ){
this.id = _id;
};
function entity(){
};
entity.inheritsFrom( base );
entity.prototype.init = function( _id ){
this.parent.init.call( this, _id );
};
Теперь мы используем класс сущности следующим образом:
var e = new entity();
e.init( "Mickey" );
console.log( e.id );
Когда я проверяю свойства моего нового класса сущности ... у меня теперь есть два идентификатора (см. Вывод ниже). Очевидно, это тривиальный случай, но я потратил много времени, пытаясь заставить это работать.
e: entity
id: "Mickey"
__proto__: base
constructor: function entity(){
id: 0
init: function ( _id ){
parent: base
__proto__: base
Почему у меня два идентификатора? Производный класс даже не ссылается на this.id базового класса.