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;
}
发布了450 篇原创文章 · 获赞 787 · 访问量 16万+

猜你喜欢

转载自blog.csdn.net/qq_42813491/article/details/97251957