new 发生了什么
- 创建一个空的对象
- 链接该对象(设置该对象的constructor)到另一个对象
- 将步骤1新创建的对象作为this的上下文 ;
- 如果该函数没有返回对象,则返回this。
实现
1 | function createNew(){ |
我在 MDN 文档上的是 Returns this if the function doesn’t return an object.
于是我试图以下的操作1
2
3
4
5
6
7
8
9
10
11
12
13
14
15// 返回 Function
function Person(name,age){
this.name = name;
this.age = age;
return function sayHi(){
console.log('hi')
}
}
var tom = new Person("tom",5)
// 返回 Array
function Fruit(name){
this.name = name;
return [name]
}
var apple = new Fruit("apple")
发现tom、apple 分别返回了 sayHi、 [“apple”],因此第四步的对象指的是 Javascript 中除了数字、布尔值、字符串、null 和 undefined 这些类型之外的对象。即 Object、Function、Array 这三种。
所以要注意 typeof null 的结果是 “object”