new 的实现

new 运算符接受一个构造器一组调用参数,实际上做了几件事:

  • 以构造器的prototype属性为原型,创建新对象;
  • 将this和调用参数传给构造器,执行;
  • 如果构造器返回的是对象,则返回,否则返回第一步创建的对象。
function create() {
    // 1.创建一个全新的对象
    let obj = new Object();

    //获取构造函数
    let Con = [ ].shift.call(arguments);//拿到第一个元素

    // 2.将对象的__proto__指向构造函数的prototype对象
    obj.__proto__ = Con.prototype;
//使用新的api obj = Object.setPrototypeOf(obj,Con.prototype);

    // 3.绑定this, 以及参数;
    let result = Con.apply(obj,arguments)
    
    //4.确保返回的是对象(如果构造器没有返回其他对象,则自动返回这个新对象)
    return typeof result === 'object' ? result : obj;
}
function create(){
//获取构造函数
let Con = [].shift.call(arguments);
//以构造函数为原型创建一个新对象
let obj = Object.create(Con);
//绑定this及其参数
let result = Con.apply(obj,arguments);
return typeof result === 'object'? result:obj;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容