原型与原型链,知其内理,触类旁通!
2023-11-05 00:29:31
原型
在JavaScript中,每个对象都有一个原型,原型是一个对象,它包含了该对象的所有属性和方法。当一个对象访问一个不存在的属性或方法时,JavaScript就会在该对象的原型中查找该属性或方法。如果在原型中找到了该属性或方法,则将其返回给对象;如果在原型中没有找到该属性或方法,则返回undefined。
function Person(name) {
this.name = name;
}
const person = new Person('John');
console.log(person.name); // John
console.log(person.age); // undefined
在这个示例中,Person函数的原型是一个对象,它包含了一个name属性。当person对象访问name属性时,JavaScript就会在person对象的原型中查找name属性,并将其返回给person对象。当person对象访问age属性时,JavaScript就会在person对象的原型中查找age属性,但没有找到,因此返回undefined。
原型链
每个对象的原型都有一个自己的原型,这样就形成了一个原型链。当一个对象访问一个不存在的属性或方法时,JavaScript就会沿着原型链向上查找,直到找到该属性或方法,或者到达原型链的末端。
function Person(name) {
this.name = name;
}
Person.prototype.age = 18;
const person = new Person('John');
console.log(person.name); // John
console.log(person.age); // 18
console.log(person.gender); // undefined
在这个示例中,Person函数的原型是一个对象,它包含了一个name属性和一个age属性。当person对象访问name属性时,JavaScript就会在person对象的原型中查找name属性,并将其返回给person对象。当person对象访问age属性时,JavaScript就会在person对象的原型中查找age属性,并将其返回给person对象。当person对象访问gender属性时,JavaScript就会沿着原型链向上查找,但没有找到gender属性,因此返回undefined。
原型链的应用
原型链在JavaScript中有很多应用,例如:
- 继承: JavaScript没有传统意义上的类继承,但是可以通过原型链实现继承。当一个对象继承另一个对象时,它就会获得另一个对象的原型链。
- 混入: 混入是指将一个对象的属性和方法添加到另一个对象中。可以通过在混入对象上定义属性和方法,然后将混入对象添加到另一个对象的原型链中来实现混入。
- 扩展: 扩展是指为一个对象添加新的属性和方法。可以通过在对象的原型链上定义属性和方法来实现扩展。
总结
原型和原型链是JavaScript中非常重要的概念,了解它们可以帮助你更好地理解JavaScript的运行机制和对象之间的关系。原型链在JavaScript中有很多应用,例如继承、混入和扩展。