JS 有哪些继承方式
JavaScript 中常见的继承方式有以下几种:
-
原型链继承
-
构造函数继承
-
组合继承(原型链加构造函数)
-
原型式继承
-
寄生式继承
-
ES6 的
class
的extends
关键字(用于现代类继承)
1、原型链继承
function Parent() {this.name = 'Parent';}Parent.prototype.getName = function() {return this.name;};function Child() {Parent.call(this); // 调用父构造函数}/*这一步是关键,设置原型链指向父构造函数的实例,这样一来,Child就继承了Parent的所有属性和方法*/Child.prototype = new Parent();var child = new Child();console.log(child.getName()); // 输出: Parent
2、构造函数继承
function Parent() {this.name = 'Parent';
}function Child() {Parent.call(this); // 使用 call 实现继承
}var child = new Child();
console.log(child.name); // 输出: Parent
3、组合继承(原型链加构造函数)
function Parent() {this.name = 'Parent';
}Parent.prototype.getName = function() {return this.name;
};function Child() {Parent.call(this); // 构造函数继承
}Child.prototype = new Parent(); // 原型链继承var child = new Child();
console.log(child.getName()); // 输出: Parent
4、原型式继承
function object(o) {function F() {}F.prototype = o;return new F();
}var parent = {name: 'Parent',getName: function() {return this.name;}
};var child = object(parent);
console.log(child.getName()); // 输出: Parent
5、寄生式继承
function createAnother(original) {var clone = object(original);clone.sayHi = function() {return 'Hi';};return clone;
}var parent = {name: 'Parent',getName: function() {return this.name;}
};var child = createAnother(parent);
console.log(child.sayHi()); // 输出: Hi
6、ES6 的 class
的 extends
关键字
class Parent {constructor() {this.name = 'Parent';}getName() {return this.name;}
}class Child extends Parent {constructor() {super(); // 调用父类构造函数}// 子类可以添加自己的方法}const child = new Child();
console.log(child.getName()); // 输出: Parent