javascript原型链

提示:以下是我阅读javascript高级程序设计第四版后个人对原型链关系的一些理解,如有错误之处,还望指出

、原型链的作用

原型链的基本作用就是属性共享,如果没有原型链,像一些常用的方法例如toString,join这些,每次使用前都得重新定义一遍,当对象实例调用某个属性时会先从自身开始查找,如果没找到就会根据原型链逐级往上查找,直到找到为止

、new操作符

           使用new操作符调用构造函数会执行如下操作

           1.在内存中创建一个新对象

            2.这个新对象内部的[[prototype]]特性被赋值为构造函数的prototype属性

            3.构造函数内的this会被赋值到这个新对象

            4.执行函数内部的代码

            5.如果构造函数返回非空对象,则返回该对象,否则返回刚创建的新对象

三、构造函数、原型对象、实例对象之间的关系

          1.构造函数其实和普通函数只是调用方式不同,任何函数只要通过new关键字调用就是构造               函数

           2.无论在什么情况下函数在创建时都会产生一个原型对象(prototype),而原型对象默认都会             拥有constructor属性,constructor指向构造函数

           3.实例对象在被创建时都会拥有一个[[prototype]]属性,这个属性的指针指向构造函数的原                  型对象([[prototype]]属性没有标准的访问方式,浏览器一般暴露出来的都是__ptoto__)

     

javascript原型链_第1张图片

javascript原型链_第2张图片

验证一下我上述所说的 

javascript原型链_第3张图片

由于user这个实例对象的__proto__属性指向的是Person.prototype,所以给原型对象添加属性时实例对象也可以访问

四、继承

javascript原型链_第4张图片

在上面的代码中,构造函数Shop并没有meat这个属性,但由于Shop.prototype实现了对SuperMarket的继承,这次赋值改变了Shop的默认原型,原本Shop.prototype对象里的[[prototype]]属性本该指向Object.prototype,改变为指向SuperMarket的实例,

这代表着Shop的实例可以访问SuperMarket所有的属性

javascript原型链_第5张图片

   

你可能感兴趣的:(前端,js)