JS原型和原型链

一、原型和原型链
1.1 原型概述
原型prototype是每一个函数都默认自带的属性,它的值是一个对象,叫做原型对象。
对于构造函数来讲,意义更大。因为通过构造函数可以实例化化对象,而每一个实例化的对象,都默认含有一个隐式的属性 __proto__ 来指向该构造函数的原型对象。
原型的作用:为实例化对象提供共享的属性和方法。
也就是说,在内存中开辟一块共享的空间,供构造函数的实例化对象在调用时指向这一个共享的地址,节约内存。
1.2 原型链概述
每一个实例化对象,都有原型对象,原型对象本质还是一个对象,所以说原型对象上面可能还有原型对象。
当一个实例化对象,去调用某个属性或方法时,它会先从自身查找,如果找到直接调用;如果找不到则去它的原型中查找,在原型中查找到则使用;如果它的原型中也没有找到,那么继续向上去原型的原型中查找,就这样一层层的查找,形成一条链,这条链我们叫做原型链。一直找到,原型链的终点是 Object 的原型,如果还是找不到则返回undefined.


prototype 属性;允许您向对象添加属性和方法
注:1. 这个属性随着函数的声明而自动生成
2. 构造函数通过调用这个属性自定义的共享属性和方法可以被该构造函数的实例化对象调用
constructor 属性;获取实例化对象的构造函数

instanceof 运算符;用于判断实例化对象的原型链中是否出现过指定的构造函数

isPrototypeOf() 方法用于判断原型对象和某个实例之间的关系

hasOwnProperty() 方法判断指定属性是不是这个实例化对象的本地属性
注:构造函数中定义的属性和方法使本地属性,随着new的实例化对象的生成而生成,也就是对象本身具备的属性和方法
返回值 是一个布尔值,本地属性返回true 非本地属性返回false

in 运算符 判断某个属性可不可以被某个实例调用

in运算符还可以用于对对象属性和数组的遍历。

