js中使用new操作符做了什么

例:var obj = new Base();

该步一共做了三件事:即

var obj  = {}; 
obj.__proto__ = Base.prototype; 
Base.call(obj);  

第一行,我们创建了一个空对象obj
第二行,我们将这个空对象的proto成员指向了Base函数对象prototype成员对象
第三行,我们将Base函数对象的this指针替换成obj。

实现一个new

MDN 的描述:


function _new(fn, ...arg) {
    const obj = Object.create(fn.prototype);
    const ret = fn.apply(obj, arg);
    // 根据规范,返回 null 和 undefined 不处理,依然返回obj,不能使用
    // typeof result === 'object' ? result : obj
    return ret instanceof Object ? ret : obj;
}

构造函数返回的知识点

1、在构造函数里面,如果不写return的话默认就是返回创建的实例对象。
2、在构造函数里面,如果写了return的话

  • 1)如果return的是一个基本数据类型的话比如,boolean,number,undefined等那么仍然返回实例对象;
  • 2)如果return的是一个对象的话,则返回该对象。原本的指向实例对象的this会被无效化。

你可能感兴趣的:(js中使用new操作符做了什么)