new 具体做了什么事?

通俗来说,我们都知道new一般做了下面四件事:

1、创建一个空对象;

2、将空对象的原型,指向于构造函数的原型;

3、将空对象作为构造函数的上下文(改变this指向);

4、对有返回值的构造函数做判断处理

代码实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//定义构造函数
function Fun(age, name) {
this.age = age
this.name = name
return 1
}

function myNew(fn, ...args) {
//1、先创造空对象
//其实等于var obj = Object.create({})
var obj = {}
//2、obj的__proto__指向原型
Object.setPrototypeOf(obj, fn.prototype)
//3、改变this指向,执行构造函数内部函数
var result = fn.apply(obj, args)
//4、判断return
return result instanceof Object ? result : obj
}