javascript原型链

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

、原型链的作用

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

、new操作符

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

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

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

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

            4.执行函数内部的代码

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

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

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

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

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

     

验证一下我上述所说的 

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

四、继承

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

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

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值