0%

new一个对象的过程发生了什么

记录下new一个对象的过程发生了什么,并手写一个new操作符的简单实现。

new一个对象的过程描述如下:

  • (1) 创建一个新对象;
  • (2) 将构造函数的作用域赋给新对象(因此 this 就指向了这个新对象);
  • (3) 执行构造函数中的代码(为这个新对象添加属性);
  • (4) 返回新对象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const _new = function (fn, ...arg) {
var o = {}
o.__proto__ = fn.prototype
fn.apply(o, arg)
return o
}

function Person(name){
this.name = name
}
Person.prototype.sayHello = function(){
console.log(`hello, ${this.name}!`)
}

var jan = _new(Person, 'Jan')
console.log(jan) // {name: 'Jan'}
jan.sayHello() // hello, Jan!