2013-11-09 8 views
0

При определении подкласса я получил TypeErorr: undefined для аргумента конструктора, который действует как заполнитель, как я вижу. Что именно происходит и как его решить?Подкласс не наследует свойства суперкласса

function Class(object) { 
    this.name = object.name; 
} 

var myClass = new Class({ 
    name: "ClassName" 
}) 

console.log(myClass.name); 

function SubClass(object) { 
    this.name = object.name; 
} 

SubClass.prototype = new Class(); 
SubClass.prototype.constructor = SubClass; 

var mySubClass = new SubClass({ 
    name: "SubClassName" 
}) 

// TypeError: объект не определен

+0

есть опечатка: 'SubClass.prototype' вместо' SubClass.protoype' –

ответ

3

Обычно ваш базовый класс будет иметь методы его прототип, так что было бы более целесообразно использовать SubClass.prototype = Object.create(BaseClass.prototype), а также вызвать ваш родительский конструктор базового класса конструктор так что object.name можно найти в родительском конструкторе (который является ошибка, которую вы получали, так как ничего не было передано в SubClass.prototype = new Class().

function Class(object) { 
    this.name = object.name; 
} 

Class.prototype.sayName = function() { 
    return this.name; 
} 

var myClass = new Class({ 
    name: "ClassName" 
}); 

console.log(myClass.name); 

function SubClass(object) { 
    // call parent constructor with context of the new SubClass instance 
    Class.call(this, object); 
} 

SubClass.prototype = Object.create(Class.prototype); 
SubClass.prototype.constructor = SubClass; 

var mySubClass = new SubClass({ 
    name: "SubClassName" 
}); 

console.log(mySubClass.sayName()); 
// > "SubClassName" 

Вот некоторые полезные ссылки

Смежные вопросы