debugger
this.w=1
this.a()
}
x.prototype={
a:function(){
alert(22)
}
}
console.log(new x())
通过单步调试我们可以看到,在断点处,我们输出this的时候,this对象已经完成了基本的构建,也就是说this代表的是一个对象,并且已经完成了原型链的构建,继续往下执行的时候,只是在this代表的这个对象里增加新的属性,并且可以调用原型中的属性了。
当我们new一个函数的时候,在执行函数里的第一条语句之前,首先创建一个空的对象{},并且this等于这个空对象,并且已经完成了原型链的构建,接下来就是执行函数里的代码,最后返回一个这个对象,除非我们显示返回其他的对象,否则一律返回this代表的这个对象。在v8中,在执行函数的代码之前,还会创建隐藏类等信息,是v8引擎对js代码的优化,使得js能像静态语言一样高效,具体有待继续研究。