关于javascript:js原型原型链

7次阅读

共计 1737 个字符,预计需要花费 5 分钟才能阅读完成。

原型、原型链:

一、原型:在 js 中函数能够有属性。每个函数都有一个非凡的属性叫作原型(prototype)

  function Person(a,b){
        this.age=a;
        this.name=b;
      }
  console.log("Person 的原型:",Person.prototype)

prototype 有两个属性:constructor、[[Prototype]]

constructor:每个实例对象都从原型中继承了一个 constructor 属性,该属性指向了用于结构此实例对象的构造函数,就是示意我创立一个 Person 对象时会从原型中 prototype 继承 constructor,指向的的是该函数 Person(自认为 constructor 其作用就是晓得本人从哪个函数创立的,如果批改以后函数的 prototype 为某个对象时,constructor 就会被替换掉,如果想应用请从新修改)

[[Prototype]]:是暗藏属性,并不能间接拜访到, 通过__proto__的读取器 (getter) 来拜访,其实能够了解为__proto__就代表[[Prototype]]

** 留神 **:__proto__该个性曾经从 Web 规范中删除,尽管一些浏览器目前依然反对它,但兴许会在将来的某个工夫进行反对,请尽量不要应用该个性。倡议应用 Object.getPrototypeOf()。

二、原型链:javaScript 常被形容为一种基于原型的语言 (prototype-based language)——每个对象领有一个原型对象,对象以其原型为模板、从原型继承办法和属性。原型对象也可能领有原型,并从中继承办法和属性,一层一层、以此类推。这种关系常被称为原型链 (prototype chain),它解释了为何一个对象会领有定义在其余对象中的属性和办法。

原型继承:每个实例对象 (object) 都有一个公有属性(__proto__)指向它的构造函数的原型对象(prototype)。该原型对象也有一个本人的原型对象(__proto__),层层向上直到原型对象为 null。null 作为原型链的最有一个环节

object 作为食物链的最顶端,我能够通过实例看出实例对象并非继承了所以 object 的属性,只是继承了包装的 object

     // 父类
      function Person(a,b){
        this.age=a;
        this.name=b;
      }
      Person.prototype.getInfo=function(){return this.name+':'+this.age}
      var person= new Person(20,'张三');
      /***** 只有函数有 prototype:*/
      console.log("person 的 prototype:",person.prototype)/
        /***** 原型链的体现,__proto__层层向上找直到 null*/
      console.log("person 的__proto__1:",person.__proto__)
      console.log("person 的__proto__2:",person.__proto__.__proto__)
      console.log("person 的__proto__3:",person.__proto__.__proto__.__proto__)
       /***** 对象的内置属性__proto__指向的是函数的 prototype*/
      console.log("__proto__与 prototype:",person.__proto__===Person.prototype)
      // 子类
      function Person2(a,b){
        this.age=a;
        this.name=b;
      }
      Person2.prototype=person;
      var p2= new Person2(30,'李四');
       /***** 原型继承 */
      console.log("person:",person.getInfo())
      console.log("p2",p2.getInfo())

运行后果:

参考文章:
https://developer.mozilla.org…
https://developer.mozilla.org…

正文完
 0