// 实现思路
// 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.prorotype
let 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'));