new操作符的工作原理
在《JS高级程序设计第3版》上写着,使用new操作符调用构造函数会经历以下4个步骤:
- 创建一个新对象;
- 将构造函数的作用域赋给新对象(因此this就指向了这个新对象);
- 执行构造函数中的代码(为这个新对象添加属性);
- 返回新对象。
下面用一个例子来模拟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创建的两个对象是完全一样的。