手动实现Javascript中new操作符

想要实现new操作符,首先要知道new操作符都干了什么事儿?

  • 创建了一个空,将this指向这个对象
  • 将创建的空对象的__proto__属性继承自构造函数的prototype属性,也就是说是继承构造函数的原型对象上的方法和属性
  • 调用构造函数,将构造函数中的this替换为空对象的this,继承构造函数中的属性
  • 返回函数内部的这个新对象
1
2
3
4
5
6
7
8
function _new (fun) {
return function () {
let obj = {}
obj.__proto__ = fun.prototype
fun.call(obj, ...arguments)
return obj
}
}

测试:

1
2
3
4
5
function Person (name, age) {
this.name = name
this.age = age
}
let person = _new(Person)('小明', 3) //=> {name: '小明', age: 3}
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2015-2022 Lee
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信