字面量:
字面量创建对象更简单,方便阅读
不需要作用域解析,速度更快
new内部:
创建一个新对象
使新对象的__proto__
指向原函数的prototype
改变this指向(指向新的obj)并执行该函数,执行结果保存起来作为result
判断执行函数的结果是不是null
或Undefined
,如果是则返回之前的新对象,如果不是则返回result
手写new
//手写一个new
function myNew(fn,...args){
//创建一个空对象
let obj={}
//使空对象的隐式原型指向原函数的显式原型
obj.__proto__=fn.prototype
//this指向obj
let result=fn.apply(obj,args)
//返回
return result instanceof Object ? result : obj
}