您的位置:首页 > Web前端 > JavaScript

js中new一个函数的时候,到底发生了什么

2016-07-20 02:02 363 查看
function x(){

            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能像静态语言一样高效,具体有待继续研究。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: