在JavaScript中,每个对象都有一个内部属性[[Prototype]],它指向另一个对象,即该对象的原型。当试图访问一个对象的属性时,如果该对象自身没有这个属性,那么JavaScript就会在这个对象的原型上查找这个属性,如果还没有,就会继续查找原型的原型,直到找到这个属性或者到达原型链的末端(即null),这就是原型链。
基础概念:
继承:
JavaScript中的继承主要是通过原型链来实现的。子类的原型可以指向父类的一个实例,这样子类就可以继承父类的属性和方法。
优势:
类型:
应用场景:
问题与解决方案:
问题:原型链继承中,所有子类实例共享父类原型上的引用类型属性。
原因:因为子类的原型指向父类的一个实例,所以所有子类实例都会共享这个实例上的引用类型属性。
解决方案:使用组合继承或者ES6类继承,在子类构造函数中调用父类构造函数来继承属性,同时使用原型链来继承方法。
示例代码(ES6类继承):
class Parent {
constructor(name) {
this.name = name;
}
sayName() {
console.log(this.name);
}
}
class Child extends Parent {
constructor(name, age) {
super(name); // 调用父类构造函数
this.age = age;
}
sayAge() {
console.log(this.age);
}
}
const child = new Child('Tom', 10);
child.sayName(); // 输出 "Tom"
child.sayAge(); // 输出 10
在这个例子中,Child
类通过extends
关键字继承了Parent
类。Child
类的实例可以访问Parent
类的属性和方法,同时还可以有自己的属性和方法。
领取专属 10元无门槛券
手把手带您无忧上云