JS 实现继承的几种方式
在JavaScript中,实现继承的几种方式包括原型链继承、构造函数继承、组合继承、原型式继承、寄生式继承和组合式继承。
原型链继承:
function Parent() {
this.name = 'Parent';
}
Parent.prototype.sayHello = function() {
console.log('Hello, I am ' + this.name);
};
function Child() {}
Child.prototype = new Parent();
var child = new Child();
child.sayHello(); // 输出: Hello, I am Parent
构造函数继承:
function Parent() {
this.name = 'Parent';
}
function Child() {
Parent.call(this);
}
var child = new Child();
console.log(child.name); // 输出: Parent
组合继承:
function Parent() {
this.name = 'Parent';
}
Parent.prototype.sayHello = function() {
console.log('Hello, I am ' + this.name);
};
function Child() {
Parent.call(this);
}
Child.prototype = new Parent();
Child.prototype.constructor = Child;
var child = new Child();
child.sayHello(); // 输出: Hello, I am Parent
原型式继承:
function object(o) {
function F() {}
F.prototype = o;
return new F();
}
var parent = {
name: 'Parent',
sayHello: function() {
console.log('Hello, I am ' + this.name);
}
};
var child = object(parent);
child.sayHello(); // 输出: Hello, I am Parent
寄生式继承:
function createAnother(original) {
var clone = Object.create(original);
clone.sayHello = function() {
console.log('Hello, I am ' + this.name);
};
return clone;
}
var parent = {
name: 'Parent'
};
var child = createAnother(parent);
child.sayHello(); // 输出: Hello, I am Parent
组合式继承:
function Parent(name) {
this.name = name;
}
Parent.prototype.sayHello = function() {
console.log('Hello, I am ' + this.name);
};
function Child(name) {
Parent.call(this, name);
}
Child.prototype = Object.create(Parent.prototype);
Child.prototype.constructor = Child;
var child = new Child('Child');
child.sayHello(); // 输出: Hello, I am Child