js原型,原型链

先铺垫下原型规则:数组

1.全部的引用类型(数组,对象,函数)都具备对象特性,可自由扩展属性(出了null外)浏览器

 

2.全部的引用类型(数组,对象,函数)都有一个__proto__属性(隐式原型),属性值是一个对象函数

 

3.全部的函数都有一个prototype属性(显示原型),属性值是一个对象spa

 

 4.全部的引用类型(数组,对象,函数),__protot__属性值指向他的构造函数的prototype属性值(new出来对象自身的(__protot__)隐式原型就是他构造函数的(prototype)显示原型)prototype

 

5.当试图去获得一个对象的某个属性时,若是这个对象自己没有这个属性,那么会去他的__proto__(即他的构造函数的prototype)中寻找对象

 

看例子:blog

 

 

例子中new出来的f对象是只有name属性(第3行建立的)和printName方法(第10行建立的),第15行中调用f.alertName.alertName直接在f对象自己中是没有的,那么会去他的__proto__(即他的构造函数Fooprototype)中寻找(在第5行)原型链

这就引出了原型链原型

 

当咱们访问对象的一个属性或方法时,它会先在对象自身中寻找,若是有则直接使用,
若是没有则会去原型对象中寻找,一直往上找(像冒泡同样),浏览器防止无限循环,找到最上层就是object了(祖先),再往上找就是null扩展

 

拓展:

使用hasOwnProperty()方法来检查该属性是new出实例对象自身中含有的仍是在原型中含有的,当对象自身中含有属性时,会返回true,

对比in,使用in检查对象中是否含有某个属性时,若是对象中没有可是原型中有,也会返回true,因此hasOwnProperty()更严格,

相关文章
相关标签/搜索