JavaScript 中的 prototype
继承是一种基于原型的对象继承机制。每个 JavaScript 对象都有一个内部属性 [[Prototype]]
,它指向另一个对象,即该对象的原型。当试图访问一个对象的属性或方法时,如果该对象本身没有这个属性或方法,JavaScript 引擎会沿着原型链向上查找,直到找到该属性或方法,或者到达原型链的末端(即 null
)。
prototype
属性,它指向一个对象,这个对象包含可以被该函数的所有实例共享的属性和方法。new
关键字调用构造函数创建的对象称为实例。[[Prototype]]
上查找,依此类推,直到找到属性或到达原型链的末端。function Animal(name) {
this.name = name;
}
Animal.prototype.sayName = function() {
console.log('My name is ' + this.name);
};
function Dog(name, breed) {
Animal.call(this, name); // 调用父类构造函数
this.breed = breed;
}
// 设置 Dog 的原型为 Animal 的实例
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog; // 修复 constructor 指向
Dog.prototype.sayBreed = function() {
console.log('My breed is ' + this.breed);
};
var myDog = new Dog('Buddy', 'Golden Retriever');
myDog.sayName(); // 输出: My name is Buddy
myDog.sayBreed(); // 输出: My breed is Golden Retriever
原因:当原型链过长时,查找属性或方法的时间会增加,影响性能。
解决方法:
原因:如果多个对象共享同一个原型,一个对象的属性更改可能会影响到其他对象。
解决方法:
Object.create(null)
创建没有原型的对象。通过理解这些基础概念和最佳实践,可以有效地利用 JavaScript 的原型继承机制来构建可维护和高效的代码。
领取专属 10元无门槛券
手把手带您无忧上云