记录下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) jan.sayHello()
|