关于new:
- 什么是new:new运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。
- 思路:
- new 关键字会进行如下的操作:
- 1、创建一个空的简单JavaScript对象(即{});
- 2、为步骤1新创建的对象添加属性__proto__,将该属性链接至构造函数的原型对象 ;
- 3、将步骤1新创建的对象作为this的上下文 ;
- 4、如果该函数没有返回对象,则返回this。
代码:
function my_new(fn,...args){
//创建一个新的对象
let obj = {}
//使空对象的隐式原型指向原函数的显式原型
obj.__proto__ = fn.prototype
//修改this指向,指向obj
let result = fn.apply(obj, args)
//返回
//判断执行函数的结果是不是null或Undefined,如果是则返回之前的新对象,如果不是则返回result
return result instanceof Object ? result : obj
}