以前只知道啪啪啪写前端代码,以实现功能为主,最近一直系统学基础,(强烈推荐侯策老师的书),将一些觉得必要的东西记录。
new做了哪些事情?
1、创建一个空对象;
2、空对象的原型(__proto__)指向构造函数的prototype属性;
3、把上面创建的空对象赋值给构造函数内部的this,用构造函数的内部方法修改this空对象;
4、根据构造函数执行逻辑,若返回的是值类型,返回obj,如果是引用类型,就返回这个引用类型的对象;
代码如下:
function newFunc(func,...args){
let obj = {};
obj.__proto__ = func.prototype;
const res = func.apply(obj,args);
return (typeof res === 'object' && res != null) ? res : obj
}
function person(name){
this.name = name
}
console.log(newFunc(person,'xiaohong'))
//{name:'xiaohong'}
上段代码涉及到的知识包括rest参数(...变量名)、apply等基础用法...看原码是真的受益匪浅....