实现javascript继承
implementing javascript inheritance
我正在尝试理解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.
如何正确实现继承(经典/原型)
首先,有两个小问题:
- 在JavaScript中大小写很重要。
Object.create
需要小写,你的函数名不匹配(subClass
vsSubClass
)。通常,构造函数的函数名是大写的。 - 使用属性
this.name
(这是继承的)而不是变量name
(这是未定义的)-参见Javascript:我需要把这个。Var为对象中的每个变量?
如何正确实现继承
将方法(不需要特权,在构造函数作用域中没有局部变量)移动到原型对象上。并且让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的name属性
调用构造函数时没有任何参数。id
、company
和name
属性的值为undefined
。此外,您的SubClass
甚至没有name
的参数,并且它不向BaseClass
构造函数调用传递任何内容。
相关文章:
- 以jquery方式继承Javascript
- JavaScript对象不是从原型链继承的
- 数据与Javascript中的继承冲突
- JavaScript对象继承问题
- Javascript嵌套函数属性继承
- 从类构造函数继承javascript
- Loaded()内容赢得't继承javascript
- 原型继承JavaScript在不同函数中使用变量
- 通过调用祖先函数继承JavaScript
- 如何从核心OpenERP 6.1继承javascript
- 安全地继承JavaScript中的原型
- 对经典和原型继承Javascript的混淆
- 不同文件中构造函数之间的部分继承(JavaScript)
- TypeScript:如何继承javascript构造函数
- 在c++中继承JavaScript函数
- 我如何继承javascript函数
- 通过__proto__原型来继承JavaScript是否不好
- 原型继承-Javascript原型:替换与添加
- 原型继承 - JavaScript 公开原型属性
- 多重继承 - JavaScript hasOwnProperty