js的new操作符做了哪些事情

先来一段代码

var Person = function () {};
var person1 = new Person();

new 过程一共包括4个步骤:

1、创建一个新对象

var person1 = new Object();

2、设置原型链,将空对象的原型proto指向构造函数的原型

person1.__proto__ = Person.prototype

3、将构造函数的作用域赋给新对象(将this指向这个新对象),执行构造函数代码(为给这个新对象添加属性)

让Person中的this指向person1,并执行Person的函数体。

var result = Person.call(person1)

4、返回新对象(return),判断Person的返回值类型。如果是值类型,返回person1,忽略返回值;如果是引用类型,就返回这个引用类型的对象。

return result instanceof Object ? result : person1;

默认情况下函数返回值为undefined,即没有显示定义返回值的话,但构造函数例外,new 构造函数在没有return的情况下默认返回新创建的对象。

但是,在有显示返回值的情况下,如果返回值为基本数据类型(string、number、null、undefined、Boolean),返回值仍然是新创建的对象。
只有在显示返回一个非基本数据类型(object)时,函数的返回值才为指定对象。这种情况下,this所引用的值也被丢弃了。

你可能感兴趣的:(js的new操作符做了哪些事情)