js--new 的实现原理

深渊向深渊呼唤

学习资源推荐

创建一个空对象,构造函数中的this指向这个空对象 创建好的新对象被执行 原型 连接 执行构造函数,其中定义的属性和方法被绑定到this指向的对象中 如果构造函数中没有返回其它对象,最终返回this,即当前对象,否则,返回构造函数中返回的对象。

代码

function $new (){

	let obj={};//创建一个空对象
	let [constructor,...args]=[...arguments]

	obj.__proto__=constructor.prototype;
	let res=constructor.apply(obj,args);
	if(res&&(typeof (res)=='object'||typeof (res)=='function')){
		return res;
	}
	return obj;
}
 

function Person(){
	this.name='tom'
}

 $new(Person).name//tom

简写

function _new(fn, ...arg) {
    const obj = Object.create(fn.prototype);
    const ret = fn.apply(obj, arg);
    return ret instanceof Object ? ret : obj;
}
栏目