js原型关系详解与属性继承实例



User.protype 是显示原型属性,只有函数才有

隐式原型属性指向自己缔造者的原型对象

<script>
      //原型属性才分为显示原型属性(prototype)和隐式原型属性(__proto__),但是原型对象只有一个

      //prototype中文:原型
      console.log(
        "--------下面的代码证明了函数的缔造者也是Object.prototype(对象原型)------"
      );

      // 一个函数对象结构
      function User() {}
      console.dir(User); //ƒ User(),这个函数身上才有prototype(显示原型属性)
      //函数的隐式原型是ƒ anonymous(),ƒ anonymous()是一种类型,匿名函数类型
      console.dir(User.__proto__);

      //说明函数的隐式原型ƒ anonymous()也是一个对象
      console.dir(User.__proto__.__proto__); //ƒ anonymous()的缔造者是

      console.dir(User.__proto__.__proto__ == Object); //false
      //匿名函数实例的隐式原型对象指向自己缔造者的原型对象所以
      console.dir(User.__proto__.__proto__ === Object.prototype); //true
      //上面的匿名函数实例的缔造这个就是Object原型对象

      //-----------------------------------------------------------------
      console.log(
        "--------函数对象实例的隐式原型属性 和 函数的显示原型属性指向一个东西------------------------------------------"
      );
      let hd = new User(); //函数对象实例
      console.log(hd.__proto__);
      console.dir(User.prototype);
      console.dir(User.prototype === hd.__proto__);

      //实例对象一般会顺着隐式原型属性向上找东西

      console.log(
        "-----------------------------------------------------------------"
      );
      //所有对象的隐式原型属性的最终是Object.prototype
      console.dir(Object.prototype.__proto__); //null 对象原型的缔造是null
      console.log(
        "-----------------------------------------------------------------"
      );

      console.dir(User.prototype); //Object
      console.dir(Object.prototype); //Object
      console.dir(User.prototype == Object.prototype); //Object
      //函数的原型属性是对象
      console.dir(User.prototype.__proto__ === Object.prototype); //true

      //函数的显示原型属性里面有一个构造函数constructor,constructor又是一个函数,一致循环下去
      console.dir(User.prototype.constructor); //ƒ User()

      console.dir(User.prototype.__proto__ === Object.prototype); //true
      console.dir(User.__proto__); //ƒ anonymous()
      //匿名函数类型也是一个对象
      console.dir(User.__proto__.__proto__);

      // // new 一个函数对象
      // let hd = new User();
      // console.log(hd);
      // console.dir(User);

      // let ob = new Object();
      // console.dir(Object);
      // console.dir(Object.__proto__);
      // console.dir(Object.prototype === Object.__proto__);

      // let arr = [];
      // console.dir(arr);
      // console.dir(Array.prototype);
    </script>

posted @ 2022-09-26 15:02  Arborblog  阅读(31)  评论(0)    收藏  举报