JavaScript的new关键字

64 阅读1分钟

使用new关键字发生了什么

/*
当使用一个new关键字去调用一个函数时,这个函数将会作为构造函数使用
	1.创建一个普通的js对象(object对象{}),称为新对象
	2.将构造函数的prototype属性设置为新对象的原型
	3.使用实参来执行构造函数,并且将新对象设置为函数的this
	4.如果构造函数返回的是一个非原始值,则该值会作为new运算的返回值返回,
       如果构造函数的返回的是一个原始值或者没有指定返回值则新的对象会作为返回值返回。
*/
function myNew(fn,...args){
    let newInstance = {}
    newInstance.__proto__ = myNew.prototype
    let res = fn.apply(newInstance,...args)
    return typeof res === "object" ? res: newInstance
}