# 原型链

实例与Object原型对象之间的链条称为原型链

# 原型模式的访问机制

原型搜索机制

  1. 读取实例对象的属性时,先从实例对象本身开始搜索。如果在实例中找到了这个属性,则返回该属性的值;
  2. 如果没有找到,则继续搜索实例的原型对象,如果在原型对象中找到了这个属性,则返回该属性的值
  3. 如果还是没找到,则向原型对象的原型对象查找,依此类推,直到Object的原型对象(最顶层对象);
  4. 如果在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)

上次更新: 2020-3-16 08:17:11