New操作符的背后实现机制是前端面试中针对面试者JS基础知识掌握情况的高频考题,今天笔者将其简单整理出来,供大家复习和理解,如有错误的地方敬请指正。
首先先看一下New操作符的示例代码:
var F = function(){
//this指向谁 在定义的时候是不知道的(换句话说,其实this的指向是在调用时声明的)
};
var p = new F();
用New调用一个函数背后发生了这些事:
- 新建了一个空对象
instance = new Object();
- 设置原型链
instance._proto_ = F.prototype;
- 让F中的this指向instance,然后执行F函数的函数体,其实也就是执行构造函数
- 判断F的返回值类型。如果是值类型,就丢弃它,返回instance,如果是引用类型,就返回这个引用类型的对象,替换掉instance。如果没有return,则返回undefined,undefined是值类型,所以返回instance即可。
注意: return this相当于返回一个引用类型的对象,其实就是instance自己,因为this指向instance。 另外,对于instance不需要设置constructor属性,整个属性在instance的原型中。