关于prototype和constructor一些疑问

function person (){

}
person.prototype.each = function(){

}

prototype是一个对象,构造函数里面的prototype的属性指向这个对象;既然prototype在构造函数外面是一个对象,小弟不明白为什么person能点对象呢;

就像下面的错误例子一样,a不能点上b;

var a = funciton(){    //a对象}var b ;               //b对象a.b            //a不能这样点b然后进行赋值吧

constructor

function person (){
}var p =  new person();var s = p.constructor + "";console.log(s)    //结果:person
constructor不是存在于person.prototype.constructor的prototype对象中吗?

为什么new出来的p也能访问这个属性;


料青山看我应如是
浏览 790回答 1
1回答

沧海一幻觉

这个就是 javascript 的原型链呀var p = new persion 的时候,其实编译器做了这么几件事情:创建一个 person 类的对象,假设叫 tt.__proto__ = person.prototype以 t 作为 this 调用函数 persion,设其返回值是 rp = r instanceof Object? r:t当读取(只是读取),一个对象的属性的时候,比如 p.each 其实会首先查找 p 下有没有这个属性,如果没有就查找 p.__proto__,然后p.__proto__.__proto__ ... 所以 由于 p.__proto__ == p.prototype 所以 p 可以访问 each。PS:__proto__ 这个属性只在比较新的浏览器中存在,ES标准中规定的是这是一个内部属性叫做[[prototype]],所以尽量不要用这个属性。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript