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 的时候,其实编译器做了这么几件事情:
创建一个 person 类的对象,假设叫
tt.__proto__ = person.prototype以 t 作为 this 调用函数 persion,设其返回值是 r
p = r instanceof Object? r:t
当读取(只是读取),一个对象的属性的时候,比如 p.each 其实会首先查找 p 下有没有这个属性,如果没有就查找 p.__proto__,然后p.__proto__.__proto__ ... 所以 由于 p.__proto__ == p.prototype 所以 p 可以访问 each。
PS:__proto__ 这个属性只在比较新的浏览器中存在,ES标准中规定的是这是一个内部属性叫做[[prototype]],所以尽量不要用这个属性。
添加回答
举报
0/150
提交
取消
