在 JavaScript 中,可以使用原型链和构造函数来实现继承。下面分别介绍两种方式的实现方法:
1. 使用原型链实现继承
javascriptCopy Codefunction Parent(name) { this.name = name; } Parent.prototype.getName = function() { return this.name; }; function Child(name, age) { Parent.call(this, name); // 继承属性 this.age = age; } Child.prototype = new Parent(); // 继承方法 Child.prototype.constructor = Child; // 修复构造函数指向 var child = new Child('Alice', 10); console.log(child.getName()); // 输出 'Alice'
在这个例子中,通过将 Child 的原型设置为一个新的 Parent 实例来实现继承,这样 Child 就可以访问 Parent 的属性和方法。
2. 使用构造函数实现继承(经典继承)
javascriptCopy Codefunction Parent(name) { this.name = name; } Parent.prototype.getName = function() { return this.name; }; function Child(name, age) { Parent.call(this, name); // 继承属性 this.age = age; } var parent = new Parent('Bob'); var child = new Child('Alice', 10); console.log(parent.getName()); // 输出 'Bob' console.log(child.getName()); // 报错,因为 Child 没有继承 Parent 的原型方法
在这个例子中,通过在子类构造函数内部使用 Parent.call(this, name) 来继承父类的属性,但无法继承父类的原型方法。
在实现继承时,要正确处理原型链和构造函数的关系,以避免出现意外的行为。另外,ES6 中也引入了 class 和 extends 的语法糖,使得实现继承更加直观和易用。