new操作符的工作原理

在《JS高级程序设计第3版》上写着,使用new操作符调用构造函数会经历以下4个步骤:

  1. 创建一个新对象;
  2. 将构造函数的作用域赋给新对象(因此this就指向了这个新对象);
  3. 执行构造函数中的代码(为这个新对象添加属性);
  4. 返回新对象。

下面用一个例子来模拟new操作符,构造函数如下:

function Person(name) {
	this.name = name;
}

封装一个函数来模拟new操作符:

function newPerson(name) {
	var o = {};							//创建一个新对象
	o.__proto__ = Person.prototype;		//给新对象绑定原型
	Person.call(o, name);				//让Person中的this指向新对象,执行构造函数中的代码
	return o;							//返回新对象
}
var person1 = new Person("Tom");
var person2 = newPerson("Tom");

在控制台输入person1,person2可以看到,使用new操作符和使用模拟的函数newPerson创建的两个对象是完全一样的。