简单理解JavaScript中的new
new 和直接执行函数的区别,new 如何实现
this 指向不同
1 | 创建一个Test构造函数,打印this |
对 return 的处理
1 | 如果一个构造函数return了一个引用类型的数据,那么使用new创建它的实例时,将会返回return的内容,当返回的值是基本类型时,将会正常创建实例 |
new 操作符都做了什么
1 | var Fn = function () {}; |
- 创建一个空对象
1 | var obj = new Object(); |
- 设置原型链(调用一个构造函数创建一个新实例后,该实例的内部将包含一个指针,只想构造函数的原型对象)
1 | obj.__proto__ = Fn.prototype; |
- 让 Fn 中的 this 指向 obj,并执行 Fn 的函数体(创建新对象之后,将构造函数的作用域赋值给新对象)
1 | var result = Fn.call(obj); |
- 确保 Fn 的函数体返回的是对象
1 | if (typeof result == "object") { |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 吼姆小行星!
评论