您现在的位置是:主页 > Web前端技术 > Web前端技术

JavaScript中的原型和原型链怎么理解

IDCBT2022-01-04服务器技术人已围观

简介这篇文章主要介绍“JavaScript中的原型和原型链怎么理解”,在日常操作中,相信很多人在JavaScript中的原型和原型链怎么理解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操

这篇文章主要介绍“JavaScript中的原型和原型链怎么理解”,在日常操作中,相信很多人在JavaScript中的原型和原型链怎么理解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”JavaScript中的原型和原型链怎么理解”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

先知道对应关系

prototype:原型
__proto__:原型链(链接点)

    从属关系

      prototype : 函数的一个属性 -> 不要想的太复杂,其实就是一个普通对象{}

      __proto__ : 对象上的一个属性 -> 不要想的太复杂,其实就是一个普通对象{}

      对象的__proto__保存着对象的构造函数的prototype

      函数是特殊对象 所以__proto__在函数上也是存在的,且是个function

      大家经常忽略忘记的一点:Object是个方法(构造函数),new Object是个实例对象!!!

      console.log(Object) //typeof Object ==='function'
      console.log(new Object) //typeof new Object ==='object'

      constructor

      constructor就是实例化对象的构造函数

      //test.constructor -> 实例化test对象的构造函数 Test
      console.log(test.constructor===Test) //true
      
      //这里个人理解为永无止境的自身调用自身,求解,没找到相关文章。
      console.log(test.constructor.prototype.constructor===Test) //true
      console.log(test.constructor.prototype.constructor.prototype.constructor===Test) //true
      //constructor允许更改
      function Test2() {
          this.a=123
      }
      test.constructor=Test2
      console.log(test)

      原型
      function Test(){}
      let test=new Test() //new完之后 test是个实例对象了
      console.log(test.__proto__===Test.prototype) //根据上面的对应关系表 可以知道结果为true
      //Test.prototype也是一个对象,所以他必须也得有__proto__
      //Test.prototype.__proto__已经到达终点了,终点是什么,终点就是Object构造函数,所以下面结果为ture
      console.log(Test.prototype.__proto__.constructor===Object)
      //且 按照上面对应关系中的规则和上条的结果,下条结果也是ture
      console.log(Test.prototype.__proto__===Object.prototype) // 
      //终点为null
      console.log(Object.prototype.__proto__) //null

      能不能描述一下原型链

      对象的__proto__保存着对象的构造函数的prototypeprototype又是个对象,所以也有自己的

      标签:

      很赞哦! ()

本栏推荐