# 原型链
实例与Object原型对象之间的链条称为原型链
# 原型模式的访问机制
原型搜索机制
- 读取实例对象的属性时,先从实例对象本身开始搜索。如果在实例中找到了这个属性,则返回该属性的值;
- 如果没有找到,则继续搜索实例的原型对象,如果在原型对象中找到了这个属性,则返回该属性的值
- 如果还是没找到,则向原型对象的原型对象查找,依此类推,直到Object的原型对象(最顶层对象);
- 如果在Object的原型对象中还搜索不到,则抛出错误;
# 重置原型对象
重置原型对象,可以一次性给原型对象添加多个方法,但切断了与原来原型对象的联系
function Popover(){}
Popover.prototype = {
show:function(){},
hide:function(){}
}
- 注意覆盖问题
- 注意识别问题
# 内置原型对象
使用内置原型可以给已有构造函数添加方法
- 数组/字符串/数字等方法调用原理
- 扩展内置方法
# 对象属性的遍历与判断
- for…in:遍历对象中的所有可枚举属性, 无论该属性存在于实例中还是原型中
- in:只要通过对象能够访问到属性就返回true, 无论该属性存在于实例中还是原型中
if(name in s1){ }
- 对象.hasOwnProperty(属性):检测一个属性是存在于对象本身中
- 返回true,说明属性存在对象中
- 返回false,说明属性不存在或在原型中
检测一个属性是否存在于原型中:!obj.hasOwnProperty(name) && (name in obj)