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

    理解原型

    原型是一个对象,其他对象可以通过它实现属性继承。任何一个对象都可以成为继承,所有对象在默认的情况下都有一个原型,因为原型本身也是对象,所以 每个原型自身又有一个原型。任何一个对象都有一个prototype的属性,记为:__proto__。每当我们定义一个对象,其__proto__属性 就指向了其prototype。

    即使我们不指定prototype,该属性也会预留。如果我们有明确指向的话,那么链表就连起来了。需要注意的是,prototype自己也有指向,就是最高级的object.prototype。

    以前要访问原型, 必须使用构造函数来实现. 无法直接使用实例对象来访问原型. 火狐最早引入属性 __proto__ 表示使用实例对象引用原型. 但是早期是非标准的. 通过该属性可以允许使用实例对象直接访问原型。

    __proto__ 有什么用?

      可以访问原型

      由于在开发中除非特殊要求, 不要使用实例去修改原型的成员. 因此属性开发时使用较少

      但是再调试过程中非常方便, 可以轻易的访问原型进行查看成员

    原型链

    对象的原型指向对象的父,而父的原型又指向父的父,这种原型层层的关系,叫做原型链。

    在查找一个对象的属性时,先查找自身的属性,如果没有再查找原型链;javascript会向上遍历原型链,直到找到给定名称的属性为止,当查找到达原型链的顶部,也即是Object.prototype,仍然没有找到指定的属性,就会返回undefined。

    说到Object.prototype,就不得不提它的一个方法,hasOwnProperty。它能判断一个对象是否包含自定义属性而不是原型链上的属性,它是javascript中唯一一个处理属性但是不查找原型链的函数。

    今天先到这吧,要早早休息了!

  • 相关阅读:
    数组常用函数
    数组游标操作
    PHP中 字符串 常用函数
    mysqli扩展库的预处理技术 mysqli stmt
    mysql的事务处理
    mysqli的增强功能
    mysql扩展库-1
    抽象类与接口
    iOS判断字符串是否包含表情字符
    iOS8 UITableView 分割条设置separator intent = 0 不起作用
  • 原文地址:https://www.cnblogs.com/ghlucky/p/5731212.html
Copyright © 2011-2022 走看看