• JS 中的 __proto__ 、prototype、constructor


    首先 先解释这三个属性:

      (1) prototype  : 它是函数独有的,从一个函数指向一个对象(函数的原型),含义是函数的原型对象,也就是这个函数所创建的实例的原型对象。(普通函数的该属性没有作用)

        作用:让每一个实例共享同一套方法。(prototype就是用来盛放所有的构造函数的实例的方法的,prototype属性上的所有内容都可以被构造函数的实例去调用)

      (2) __proto__  : 它是对象独有的,从一个对象指向一个对象。(即指向他们的原型对象,可以理解为父对象)

         作用:当访问一个对象的属性时,如果该对象内部不存在这个属性,那么就会去它的__proto__属性所指向的那个对象(可以理解为父对象)里找,如果父对象也不存在这个属性,则继续往父对象的__proto__属性所指向的那个对象(可以理解为爷爷对象)里找,如果还没找到,则继续往上找….直到原型链顶端null(可以理解为原始人。。。),此时若还没找到,则返回undefined(可以理解为,再往上就已经不是“人”的范畴了,找不到了,到此为止)。由以上这种通过__proto__属性来连接对象直到null的一条链即为我们所谓的原型链

      (3)constructor : 它是对象独有的, 从一个对象指向一个对象。(即指向该对象的构造函数),每个对象都有构造函数。所有函数最终都是由Function()构造函数得来,所以constructor属性的终点就是Function()。

        注意:Function这个对象比较特殊,它的构造函数就是它自己(因为Function可以看成是一个函数,也可以是一个对象)。

      总结:

          ⑴ __proto__constructor属性是对象所独有的;

          ⑵ prototype属性是函数所独有的,因为函数也是一种对象,所以函数也拥有__proto__constructor属性。(即只有函数有prototype属性,其余两个函数对象都有。)

          ⑶ constructor属性的含义就是指向该对象的构造函数,所有函数(此时看成对象了)最终的构造函数都指向Function()

    Object、Array、Function 的关系:

      (1)  函数是一种对象。

      (2) 对象都是通过函数创建的

      (3) Object 是一切引用类型的父类,所有能被Object接收的均为对象(数组是一种对象)

    引用数据类型:Object 、Array 、Function 、Data等。

    有人说,Object类型相当于哺乳动物,Array相当于犬科动物,Function相当于猫科动物,他们分别是一种狗,一种猫,一种猪,一种鸭。他们彼此之间并无直接联系,但同属动物(引用类型)。

  • 相关阅读:
    android 多线程
    Uva 10881 Piotr’s Ants 蚂蚁
    LA 3708 Graveyard 墓地雕塑 NEERC 2006
    UVa 11300 Spreading the Wealth 分金币
    UVa 11729 Commando War 突击战
    UVa 11292 The Dragon of Loowater 勇者斗恶龙
    HDU 4162 Shape Number
    HDU 1869 六度分离
    HDU 1041 Computer Transformation
    利用可变参数函数清空多个数组
  • 原文地址:https://www.cnblogs.com/wehome/p/10181713.html
Copyright © 2020-2023  润新知