原型链的理解

原型链:

    1) __proto__属性

            定义函数时,函数就有了prototype属性,该属性指向的对象是共享的。

            为什么javascript中,为什么对象能够访问prototype中的属性和方法呢?

            因为:当对象new构造函数创建时,对象会自带一个__proto__属性,这个属性是由

            javascript分配的,这个属性是一个引用类型,它指向的是构造函数的原型。

     2) 什么是原型链?          

var Animal=function(){
          this.name='animal';
          this.sex='男';
      }
      Animal.showName=function(){
          alert(this.name)
      }
      var Dog=function(){
       //  this.name='dog'       
      }
      Dog.prototype=new Animal();
      var dog=new Dog();
    console.log(dog.__proto__);
    console.log(dog.__proto__.__proto__);
    console.log(dog.__proto__.__proto__.__proto__);
    console.log(dog.__proto__.__proto__.__proto__.__proto__);

             我们先看一下上面这部分代码,是一个通过原型链继承的,原型继承代码,而我们看到

             的一系列的__proto__就是原型链了。

  •    第一个打印的是Animal的实例
  •    第二个打印的是Animal的原型对象
  •    第三个打印的是Object对象
  •    第四个打印的是null,因为Object对象没有__proto__属性

    3) 原型链查找

              原型链查找有一个就近原则,就好比上面代码如果实例上有带name属性,那么它就直

              接拿name上的属性了,如果没有那么他会沿着原型链往上查找,知道查找到这个属性

              为止

           

posted @ 2018-03-25 09:00  LLC-Mite  阅读(236)  评论(0编辑  收藏  举报