NIKO'S BLOG

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!

笔者注

博客内文章若不另外注明,均为原创。转载请注明出处,谢谢。

博客内容主要是对新知识的归纳、总结。记录博客的目的也是为了方便自己日后的巩固复习。欢迎大家提出文章中理解错误的地方,不胜感激。若文章对你有帮助,将是我的荣幸。