# new 操作符做了什么
创建一个空对象
继承构造函数的原型 通过指针
obj.__proto__ = Foo.prototype
改变 this 指向 属性和方法 都被加入到 this 引用的对象中
Foo.call(obj)
如果源构造函数有返回值,则处理返回值
如果返回值是基本数据类型 则返回空对象
如果是引用类型 则返回构造函数的返回
// 1 创建一个空对象
// 构造函数 Foo
function Fn1() {
}
const n1 = new Fn1();
console.log(n1); // Fn1 {}
// 1 end
// 2 继承构造函数的原型 Foo.prototype
console.log(n1.__proto__ === Fn1.prototype); // true
// 2 end
// 3 改变 this 指向 属性和方法 都被加入到 this 引用的对象中
function fn2() {
this.name = 'hello'
}
const n2 = new fn2()
console.log(n2.name); // hello
// 3 end
// 4 如果源构造函数有返回值,则处理返回值
// 如果返回值是基本数据类型 则返回空对象
// 如果是引用类型 则返回构造函数的返回
function fn3() {
return 'jack'
}
const n3 = new fn3()
console.log(n3); // fn3 {}
function fn4() {
return { name: 'hello'}
}
const n4 = new fn4()
console.log(n4); // {name: 'hello'}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38