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能像静态语言一样高效,具体有待继续研究。
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能像静态语言一样高效,具体有待继续研究。
相关文章推荐
- 简单实用的遮幕原点扩散交互特效
- JSP中如何利用JS实现登录页面的跳转(JSP中如何利用JS实现跳转页面)
- js基础学习之--仿百度登录鼠标拖拽事件
- javascript快速入门
- javascript快速入门
- javascript中数组和字符串的方法对比
- javascript特效实现――当前时间和倒计时效果的简单实例
- JavaScript的==运算详解
- 必备的JS调试技巧汇总
- JavaScript中的splice方法用法详解
- JavaScript DOM 对象深入了解
- JavaScript中数组的22种方法必学(推荐)
- javaScript给元素添加多个class的简单实现
- js只执行1次的函数示例
- JS for循环中i++ 和 ++i的区别介绍
- ES6新特性:JavaScript中内置的延迟对象Promise
- 44 个 Javascript 变态题解析 (上)
- 44个 Javascript 变态题解析 (下)
- JSTree使用指南
- 文件上传