[吊打面试官] 手写篇:new

对new关键字的描述:来自MDN

new关键字会做以下操作:

1.创建一个空的简单Javascript对象 (即{});

2.链接该对象(即设置该对象的构造函数)到另一个对象;

3.将步骤1新创建的对象作为this的上下文;

4.如果该函数没有返回对象,则返回this;

call实现不传对象:

function myNew(fn) {
    // 以构造函数fn的prototype为原型 创建一个新的简单对象
    let o = Object.create(fn.prototype)
    // 改变fn的this指向到o,并执行fn
    let k = fn.call(o);
 
    // 如果构造函数没有返回对象,则返回o
    if (typeof k === 'object') {
        return k;
    } else {
        return o;
    }
        
}
复制代码

apply 传递参数:

function myNew(fn, ...args) {
    // 以构造函数fn的prototype为原型 创建一个新的简单对象
    let o = Object.create(fn.prototype)
    // 改变fn的this指向到o,并执行fn
    let k = fn.apply(o, args);
 
    // 如果构造函数没有返回对象,则返回o
    if (typeof k === 'object') {
        return k;
    } else {
        return o;
    }
        
}
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享