Shaoli's Blog

四、手写源码之 实现 new

new 关键字会进行如下的操作:

  1. 创建一个空的简单JavaScript对象(即{});
  2. 链接该对象(设置该对象的constructor)到另一个对象 ;
  3. 将步骤1新创建的对象作为this的上下文 ;
  4. 如果该函数没有返回对象,则返回this


  function createNew (constructor, ...args) {
    // 创建一个空对象
    const obj = {}
    // 链接原型(__proto__写法已经废弃)
    // obj.__proto__ = constructor.prototype 
    Object.setPrototypeOf(obj, constructor.prototype)
    // 改变 this 指向,把constructor的 this 绑定到 obj 上,此时 obj 就继承了 constructor 的属性和方法
    const result = constructor.apply(obj, args)
    // 如果没有返回对象,则返回 this
    return typeof result === 'object' ? result : obj
  }


function People(name,age) {
    this.name = name
    this.age = age
}

let peo = createNew(People, 'Shaoli', 28)
console.log(peo.name) // Shaoli
console.log(peo.age) // 28


如果有返回结果的

function People2 (name, age{
  this.name = name
  return {
    namethis.name
  }
}

let peo2 = createNew(People, 'Shaoli', 28)
console.log(peo2) // {name: "Shaoli"}




如有不足,麻烦指出!

    评论列表

  • 暂无评论...快来说说吧!
person
0 / 16
comment
0 / 100