牛骨文教育服务平台(让学习变的简单)
博文笔记

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

创建时间:2016-07-20 投稿人: 浏览次数:2230
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能像静态语言一样高效,具体有待继续研究。

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。