new的本质:
1.在内存中创建一个新的空对象
2.让this指向这个新的对象
3.执行构造函数里面的代码,给这个新的对象添加属性和方法
4.返回这个新的对象(所以构造函数里面不需要return)
如果构造函数内部有return语句,而且return后面跟着一个对象, new 命令会返回 return
语句指定的对象;否则,就会不管 return 语句,返回 this 对象
function myNew(func){
//声明一个中间对象,该对象为最终返回的实例
var obj = {}
//将实例的原型指向构造函数的原型
obj.__proto__ = func.prototype
//ret为构造函数执行的结果,这里通过```apply```,将构造函数内部的```this```指向修改为指向```res```,即实例对象
let res = func.apply(obj, arguments)
//当我们在构造函数上明确指定了返回对象时,那么```new```的执行结果就是该返回对象
if ((res !== null && typeof res === "object") || (typeof res === "function"){
return res
}
return obj
}
function A () {
this.a = 1222222
}
console.log(myNew(A))