zoukankan      html  css  js  c++  java
  • JS原型和原型链

    • 原型

      • 原型(prototype):保存所有子对象共有成员的对象
      • 每个构造函数都有一个原型属性,引用了该构造函数对应的原型对象
      • 由构造函数创建的每个对象中都有一个__proto__属性,指向构造函数的原型对象
      • 在访问子对象的成员时,优先在成员本地找,找不到,再去构造函数的原型中查找
    • 创建原型

      • 创建空对象
      • 调用构造函数,为新对象添加成员
      • 设置当前对象的__proto__属性为构造函数的原型对象
      • 每个对象自有的成员,放在构造函数中
      • 所有子对象共有的成员,放在原型对象中
    • 原型链

      • 由各级对象的__proto__逐级向上引用形成的多级继承关系
      • 所有的对象都有一个__proto__属性,指向自己的父对象
    • 原型相关API

      • 判断一个属性是否可用
        • in关键字:"属性名" in 对象
          • 如果"属性名"在当前对象的原型链中,返回true
          • 如果在整条原型链上都没找到,返回false
        • 使用===undefined:说明不包含
          • 简写为(!对象.成员名)
        • 判断是否自有属性:
          • obj.hasOwnProperty("成员");
          • 如果obj本地有指定"成员",则返回true,没有返回false
        • 判断共有属性:
          • 不是自有的,还要存在于原型链上
          • if(!obj.hasOwnProperty("成员")&&"成员" in obj)
      • 获得任意对象的__proto__属性:
        • 获得父级对象
        • var 父对象=Object.getPrototypeOf(对象);
      • 判断父对象是否处在子对象原型链的上级:
        • 父对象.isPrototypeOf(子对象);
        • 只要父对象在子对象的原型链上,就返回true,否则返回false
      • 删除对象中的属性:
        • delete 对象.成员
        • 只能删除自有的成员
        • 只有var声明的全局变量不让delete
        • 使用window.或window[""]增加的全局成员可以delete
      • 判断一个对象是数组的几种方法
        • Array.prototype.isPrototypeOf(obj)
          • 如果返回true,说明是数组,否则不是
        • obj instanceof Array
          • 对象 instanceof 类型名,返回true,说明是数组
          • instancof会查找原型链上所有原型的构造函数
        • Object.getPrototypeOf(obj)==Array.prototype
        • Object.prototype.toString.call(arr)
          • override,子对象觉得父对象的成员不好用
          • 可自己定义同名的自有成员覆盖父对象
        • Object.prototype.toString.apply(arr)
          • call和apply: 在调用方法的一瞬间,替换调用方法的对象
        • Array.isArray(obj)
          • 专门判断对象是否是数组!
  • 相关阅读:
    数据库四种事务隔离级别
    JAVA自定义查询策略
    JAVA分页工具类
    Git常用指令
    TDH-大数据基础
    TDH-ssh免密登录
    TDH-search汇报理解
    TDH-常见运维指令
    pyecharts 0.5 visualmap 显示精度precision到小数
    14-influence 图机器学习之网络的影响力最大化
  • 原文地址:https://www.cnblogs.com/SharkJiao/p/13548191.html
Copyright © 2011-2022 走看看