美文网首页饥人谷技术博客
JS里的原型与原型链

JS里的原型与原型链

作者: 不爱举铁的伪文青不是好前端 | 来源:发表于2019-02-08 23:52 被阅读3次

    原型

    原型和原型链的目的是解决构造函数生成的对象内共同属性重复生成的问题,使其更高效。在下面这个例子里每次生成一个实例对象都要生成一个mmm方法,没有必要,完全可以共享。

    构造函数生成的对象称为实例对象

    function Person(name,gender){
      this.name = name
      this.gender = gender
      this.mmm = function reader(){
        console.log('hello world')
      }
    }
    
    var person1 = new Person(Jack,male)
    var person2 = new Person(Lucy,female)
    

    person1person2是构造函数Person生成的两个实例对象

    function Person(name,gender){
      this.name = name
      this.gender = gender
     }
    Person.prototype.mmm = function reader(){
        console.log('hello world')
      }
    var person1 = new Person(Jack,male)
    var person2 = new Person(Lucy,female)
    
    person1.mmm // 'hello world'
    person2.mmm // 'hello world'
    

    上面例子里构造函数Personprototype属性就是person1person2的原型对象,原型对象添加一个mmm属性,两个实例对象都共享这个属性。

    原型链

    JS里面规定所有对象都有自己的原型对象,而原型对象也是对象因此也有自己的原型对象,而且任何一个对象都可以充当其他对象的原型,因此会形成一个原型链

    如果一层层上溯,所有对象的原型都可以追溯到Object.prototype,既Object构造函数的prototype属性,也就是说所有的属性都继承了Object.prototype的属性,这就是所有对象都有valueOf()toString()方法的原因,因为这两个方法在Object.prototype里面。
    需要注意Object.prototype的原型是null

    kNwh5R.md.png
    String.prototype是String公用属性引用(防止被垃圾回收)

    相关文章

      网友评论

        本文标题:JS里的原型与原型链

        本文链接:https://www.haomeiwen.com/subject/suaosqtx.html