跳到主要内容

实现new

  • 1、创建一个新对象,将对象的原型指向构建函数的原型对象上

  • 2、将构造函数的作用域赋给新对象(因此this就指向了这个新对象)

  • 3、执行构造函数中的代码(为这个新对象添加属性)

  • 4、返回新对象

    • Object.create(proto) , 第一个参数是原型对象
      • Object.create()可以返回新对象,使用指定的对象创建新对象的原型

    Object.create 方法, 第一个参数是原型对象,以这个原型对象 作为指定的对象来创新新对象的原型

js
function myNew(fn, ...args) {
//1.创建一个对象并将obj的原型指向构造函数的原型对象上
//(实例对象的原型__proto__指向它所在的构造函数的原型对象prototype)
let obj = Object.create(fn.prototype);
//2.如果构造函数有返回值,则返回;否则,就会默认返回新对象。
let result = fn.call(obj, ...args);
//3.我们要判断result是不是object类型,如果是object类型,那么就返回result,否则,返回obj
//{},[],function 都属于Object对象
return result instanceof Object? result : obj;
}