new

过程:

  1. 创建一个新对象
  2. 将新的对象的 __proto__ 指向被实例化函数的 prototype
  3. 将被实例化函数的 this 指向 新的对象
  4. 如果函数返回的是对象则返回函数结果,否则返回新的对象
function myNew() {
  const obj = {};
  const constructor = [].shift.call(arguments);
  obj.__proto__ = constructor.prototype;
  const reslut = constructor.apply(obj, arguments);
  return reslut && reslut instanceof Object ? reslut : obj;
}