在 JavaScript 中,可以使用原型链和构造函数来实现继承。下面分别介绍两种方式的实现方法:
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 的属性和方法。
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 的语法糖,使得实现继承更加直观和易用。