JavaScript的New操作符的背后机制

217 阅读1分钟

New操作符的背后实现机制是前端面试中针对面试者JS基础知识掌握情况的高频考题,今天笔者将其简单整理出来,供大家复习和理解,如有错误的地方敬请指正。

首先先看一下New操作符的示例代码:

var F = function(){
    //this指向谁 在定义的时候是不知道的(换句话说,其实this的指向是在调用时声明的)
};
var p = new F();

用New调用一个函数背后发生了这些事:

  1. 新建了一个空对象
instance  = new Object();    
  1. 设置原型链
instance._proto_ = F.prototype;
  1. 让F中的this指向instance,然后执行F函数的函数体,其实也就是执行构造函数
  2. 判断F的返回值类型。如果是值类型,就丢弃它,返回instance,如果是引用类型,就返回这个引用类型的对象,替换掉instance。如果没有return,则返回undefined,undefined是值类型,所以返回instance即可。

注意: return this相当于返回一个引用类型的对象,其实就是instance自己,因为this指向instance。 另外,对于instance不需要设置constructor属性,整个属性在instance的原型中。