为了账号安全,请及时绑定邮箱和手机立即绑定

关于prototype和constructor一些疑问

关于prototype和constructor一些疑问

料青山看我应如是 2018-08-07 11:10:20
function person (){ } person.prototype.each = function(){ }prototype是一个对象,构造函数里面的prototype的属性指向这个对象;既然prototype在构造函数外面是一个对象,小弟不明白为什么person能点对象呢;就像下面的错误例子一样,a不能点上b;var a = funciton(){    //a对象}var b ;               //b对象a.b            //a不能这样点b然后进行赋值吧constructorfunction person (){ }var p =  new person();var s = p.constructor + "";console.log(s)    //结果:personconstructor不是存在于person.prototype.constructor的prototype对象中吗?为什么new出来的p也能访问这个属性;
查看完整描述

1 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

这个就是 javascript 的原型链呀
var p = new persion 的时候,其实编译器做了这么几件事情:

  1. 创建一个 person 类的对象,假设叫 t

  2. t.__proto__ = person.prototype

  3. 以 t 作为 this 调用函数 persion,设其返回值是 r

  4. p = r instanceof Object? r:t

当读取(只是读取),一个对象的属性的时候,比如 p.each 其实会首先查找 p 下有没有这个属性,如果没有就查找 p.__proto__,然后p.__proto__.__proto__ ... 所以 由于 p.__proto__ == p.prototype 所以 p 可以访问 each。

PS:__proto__ 这个属性只在比较新的浏览器中存在,ES标准中规定的是这是一个内部属性叫做[[prototype]],所以尽量不要用这个属性。


查看完整回答
反对 回复 2018-09-24
  • 1 回答
  • 0 关注
  • 789 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号