我试图理解javascript中的继承
function baseClass(name) {
this.name = name;
this.getName = function() {
return this.name;
}
}
function subClass(id, company){
baseClass.call(this);
this.id = id;
this.company = company;
this.toString = function() {
return name + "\n" + this.id + "\n" + this.company;
}
}
subClass.prototype = Object.create(baseClass);
var s = new subClass();
s.toString(); //here the name property from the baseClass is not displayed.
如何正确实现继承(经典/原型)
答案 0 :(得分:3)
首先,有两个小问题:
Object.create
需要小写,且您的函数名称不匹配(subClass
vs SubClass
)。通常,构造函数名称是大写的。this.name
(继承)而不是变量name
(未定义) - 请参阅Javascript: Do I need to put this.var for every variable in an object? 如何正确实现继承
在原型对象上移动方法(不需要特权,构造函数范围内没有局部变量)。让SubClass.prototype
继承自BaseClass.prototype
,而不是BaseClass
函数。
function BaseClass(name) {
this.name = name;
}
BaseClass.prototype.getName = function() {
return this.name;
};
function SubClass(id, company){
BaseClass.call(this);
this.id = id;
this.company = company;
}
SubClass.prototype = Object.create(BaseClass.prototype);
SubClass.prototype.toString = function() {
return this.name + "\n" + this.id + "\n" + this.company;
};
new SubClass().toString()
不显示baseClass的名称属性
你在没有任何参数的情况下调用构造函数。 id
,company
和name
属性将具有undefined
值。此外,您的SubClass
甚至没有name
的参数,也没有向BaseClass
构造函数调用传递任何内容。