首先看看 new 具有哪些功能:
创建一个对象, 对象的原型指向构造函数的 prototype.
构造函数里的 this 指向的就是这个对象.
执行构造函数里的语句.
但还要考虑一点, 构造函数里可以返回一个自定义的值, 这个值 es 有这样的规范:
遇上返回 Object 就返回自身, 否则返回构造的 Object.
- function _new(func,...arg){
- // 1. 创建一个对象, 对象的原型指向构造函数的 prototype.
- let obj=Object.create(func.prototype)
- // 将构造函数里的 this 指向这个对象, 病执行构造函数里的语句
- const ret=fn.appay(obj,arg)
- // 遇上返回 Object 就返回自身, 否则返回构造的 Object
- return ret instanceof Object?ret:obj
- }
来源: http://www.jianshu.com/p/0042cdb0503d