new关键字主要的作用是继承
当一个构造函数前加上new的时候,背地里来做了四件事:
1.生成一个空的对象并将其作为 this;
2.将空对象的 proto 指向构造函数的 prototype;
3.运行该构造函数;
4.如果构造函数没有 return 或者 return 一个返回 this 值是基本类型,则返回this;如果 return 一个引用类型,则返回这个引用类型。
对应伪代码:
对于const a = new Foo();
,new干了以下事情
const o = new Object();//创建了一个新的空对象o
o.__proto__ = Foo.prototype;//让这个o对象的` __proto__`指向函数的原型`prototype`
Foo.call(o);//this指向o对象
a = o;//将o对象赋给a对象
new一共经历4个阶段
1、创建一个空对象
var obj = new Object();
2、设置原型链
此时便建立了obj对象的原型链
obj._proto_ = Object.prototype;
3、让Func的this指向obj,并执行Func函数体
Object.call(obj);
4、判断Func(构造函数)的返回值类型
return typeof result === 'object'? result : obj;
构造函数默认return this
,不用写,如下
function A(){
this.name = x;
// return this;
}
如果构造函数return是基本数据类型:
return 1
return "abc"
则return
后的东西忽略,就是return {}
如果是return的是引用类型:
则以return
的内容为准
function A(){
this.name = x; // 无效
return {a: 1};
}