美文网首页
一个例子 - 看懂JS中new关键字的实现原理

一个例子 - 看懂JS中new关键字的实现原理

作者: Jason_Zeng | 来源:发表于2019-08-21 13:18 被阅读0次
    1. new的实现代码如下:
    // new的实现
    function NewFn(fn) {
        // 判断是否有原型对象,并当作new的原型对象
        let proto = Object(fn.prototype) === fn.prototype ? fn.prototype : Object.prototype;
        // 利用原型创建new的对象
        let obj = Object.create(proto);
        // 把obj当作fn的this调用, 并解析去除fn在arguments里面的位置,剩余的传进去
        let res = fn.apply(obj, Array.prototype.slice.call(arguments, 1));
        // 判断返回的是否是对象
        if (Object(res) === res) { 
            // 是对象则返回经过fn处理过的res
            return res;
        }
        // 不是对象返回obj
        return obj;
    }
    
    1. 测试用例如下
    // 构造函数
    function Foo(name) {
        this.name= name;
        this.go = function() {
            console.log(this.name +  " go");
        }
    }
    Foo.prototype.base = "mother";
    
    // 测试用例
    var foo = NewFn(Foo, "jason");
    console.log(foo.name);
    console.log(foo.base);
    foo.go();
    console.log(foo instanceof Foo);
    
    1. 输出结果
    jason
    mother
    jason go
    true
    

    相关文章

      网友评论

          本文标题:一个例子 - 看懂JS中new关键字的实现原理

          本文链接:https://www.haomeiwen.com/subject/dipbsctx.html