js new 操作符的原理

2021-11-24  本文已影响0人  黎明的叶子

见代码

    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)

上一篇下一篇

猜你喜欢

热点阅读