JavaScript中的继承可以通过以下几种方式实现
- 原型链继承:通过将子类的原型对象指向父类的实例来实现继承。
function Parent() {
this.name = 'parent';
}
Parent.prototype.sayName = function() {
console.log(this.name);
}
function Child() {}
Child.prototype = new Parent();
var child = new Child();
child.sayName(); // 'parent'
- 构造函数继承:通过在子类构造函数中调用父类构造函数来实现继承。
function Parent(name) {
this.name = name;
}
Parent.prototype.sayName = function() {
console.log(this.name);
}
function Child(name) {
Parent.call(this, name);
}
var child = new Child('child');
child.sayName(); // 'child'
- 组合继承:将原型链继承和构造函数继承结合起来,既能继承父类的属性和方法,又能保留子类自己的属性和方法。
function Parent(name) {
this.name = name;
}
Parent.prototype.sayName = function() {
console.log(this.name);
}
function Child(name, age) {
Parent.call(this, name);
this.age = age;
}
Child.prototype = new Parent();
Child.prototype.constructor = Child;
Child.prototype.sayAge = function() {
console.log(this.age);
}
var child = new Child('child', 10);
child.sayName(); // 'child'
child.sayAge(); // 10
- 原型式继承:通过创建一个临时的构造函数来实现继承。
function createObj(o) {
function F() {}
F.prototype = o;
return new F();
}
var parent = {
name: 'parent',
sayName: function() {
console.log(this.name);
}
};
var child = createObj(parent);
child.sayName(); // 'parent'
-
寄生式继承:在原型式继承的基础上,增强对象,返回一个新的对象。
-
寄生组合式继承:在组合继承的基础上,使用寄生式继承来优化继承过程,避免重复调用父类构造函数。
网友评论