见代码
function _new(fun) {
let obj = {}
// obj.__proto__ = fun.prototype // 由于__proto__属于隐式属性,有的浏览器不能识别这样写 所以用下面写法
Object.setPrototypeOf(obj, fun.prototype)
let result = fun.call(obj)
if(!result) return obj // 排除结果为null的情况
if(/^(object|function)$/.test(typeof result)) return result //如果函数执行返回的是object和function 那么以结果为准
return obj
}
function Fn() {
this.name = 'limingyan'
this.age = 30
return { a: 100, b: 100 } //返回的是result 即为当前结果
// return 1 //返回的是obj
}
// let fn = new Fn()
let fn = _new(Fn)
console.log(fn)
网友评论