Skip to content

手写一个函数实现new关键字的功能 #7

@hans000

Description

@hans000
function newX(Fn, ...args) {
  let obj = Object.create(Fn.prototype)	// 步骤1、2
  let ret = Fn.apply(obj, args)	// 步骤3
  return ret instanceof Object ? ret : obj	// 步骤4
}

// new干了啥?
// 1、创建一个临时对象instance
// 2、维护原型链,instance.__proto__ = Func.prototype
// 3、Fn中的this指向instance,执行Fn
// 4、返回一个对象,如果显式的return一个变量,判断变量类型
//    如果是值类型,会返回这个临时对象instance;
//    函数不写默认返回undefined,undefined是值类型所以返回临时对象instance)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions