【JS 基础】new 操作符

156 阅读1分钟

new 一个函数

在JS中,new的作用是通过构造函数来创建一个实例对象 我们来看一个例子

function Foo(name) {
    this.name = name
}
var foo = new Foo()

上面的new操作,干了下面三件事

  1. 创建一个空对象
var obj = {}
  1. 将空对象原型的内存地址__proto__指向函数的原型对象
obj.__proto__ = Foo.prototype
  1. 利用函数的call方法,将原本指向window的绑定对象this指向了obj。
Foo.call(obj, 'hello')

手写实现new

function create(fn, ...args) {
  const obj = Object.create(fn.prototype)
  const res = fn.apply(obj, args)
  return res instanceof Object ? res : obj
}
// 测试结果
function create(fn, ...args) {
  const obj = Object.create(fn.prototype)
  const res = fn.apply(obj, args)
  return res instanceof Object ? res : obj
}
function Foo(name) {
  this.name = name
}
Foo.prototype.say = function() {
  console.log(this.name)
}
const foo = create(Foo, 'abc')
foo.say() // abc