new 的过程中做了什么
一个新对象被创建。它继承自foo.prototype
构造函数 foo 被执行。执行的时候,相应的传参会被传入,同时上下文(this)
会被指定为这个新实例。new foo 等同于 new foo(,只能用在不传递任何参数的情况
如果构造函数返回了一个“对象”,那么这个对象会取代整个new出来的结果。如果构造
函数没有返回对象,那么new出来的结果为步骤1创建的对象
手动实现new方法
js
var M = function(name) {
this.name = name
}const n1 = new N()
const n2 = new2(N)
js
function new2(func) {
const o = {}
o.__proto__ = func.prototype
const k = func.call(o)
// 如果有返回值
if(typeof k === 'object') {
return k
} else {
return o
}
}
讨论区
欢迎留下想法与补充