原型与原型链:
- 原型prototype 原型是函数特有的,常规的数组和对象是没有原型的
- 原型链_proto_谷歌浏览器中呈现是[[prototype]] 原型链是大家都有的
function Person(){
}
Person.prototype.name="周一"
Person.prototype.age=1212
Person.prototype.getAge=function(){
console.log(this.age)//打印年龄
}
//通过new 关键字实例化当前函数
let person1 =new Person()//person1-----就是当前的实例
person1.getAge()//------>1212
person1.age = 0
person1.getAge()//------->0
//这时候再调用 getAge 打印出来的则是0
是因为当前 的实例属性上面已经有了age属性,他就不会再去原型链里找age属性了,就好比你自己现在需要一个苹果,但是自己已经有了,还去要别人的干嘛
就近原则不是指代码挨得近,而是去当前实例属性去查找,如果找到了就返回,否则顺着原型链一层一层往上找 ,直到找到null为止,找不到属性就会报undefined,找不到方法就会报not a function
原型链的查找机制如下图
···