**参考文章**:https://zhuanlan.zhihu.com/p/375597828
JavaScript的原型链就是该编程语言为了实现面对对象编程的一种设计,基于原型链,可以让JavaScript对象拥有封装、继承和多态等面对对象特性。
1、prototype
在JavaScript中,每个函数都有一个prototype属性,这个属性指向函数的原型对象。
function Person(age) {
this.age = age
}
Person.prototype.name = '老王'
var person1 = new Person()
var person2 = new Person()
console.log(person1.name) //老王
console.log(person2.name) //老王
2、proto
这是每个对象(除null外)都会有的属性,叫做__proto__,这个属性会指向该对象的原型。
function Person() {
}
var person = new Person();
console.log(person.__proto__ === Person.prototype); // true
3、constructor
每个原型都有一个constructor属性,指向该关联的构造函数。
function Person() {
}
console.log(Person===Person.prototype.constructor) //true
4、实例与原型
当读取实例的属性时,如果找不到,就会查找与对象关联的原型中的属性,如果还查不到,就去找原型的原型,一直找到最顶层为止。
function Person() {
}
Person.prototype.name = '老王';
var person = new Person();
person.name = '李四';
console.log(person.name) // 李四
delete person.name;
console.log(person.name) // 老王
5.原型的原型
var obj = new Object();
obj.name = '老王'
console.log(obj.name) // 老王
最后原型链的终点就是Object.prototype