// 实现思路// 1. 创建一个空的对象// 2. 将函数的arguments的值指向到数组的shift方法上 取出第一个数// 3. 判断是不是一个函数// 4. 设置原型 将对象的原型设置为函数的prototye对象// 5. 判断函数的返回值类型,如果是值类型 返回创建的对象,如果是引用类型就返回这个引用类型的对象function _new() {// 取出第一个传入的参数// shift会改变原来的数组let constructor = Array.prototype.shift.call(arguments)// 判断是不是一个函数if(typeof constructor !='function'){console.error('Not Function')}// 创建一个空的对象let newObject = Object.create(constructor.prototype)// let newObject = {}// newObject.__proto__ = constructor.prorotypelet result = constructor.apply(newObject,arguments)let flag = result && (typeof constructor =='object' || typeof constructor == 'function')return flag?result:newObject}function fn() {this.a = arguments[0]}console.log(_new(Object, 'zs'));
