学习笔记——JavaScript中,new关键字到底做了什么?

63 阅读1分钟

1.在javaScript中,我们常常用new关键字去创建一个对象(ex)

function Person(name,age) {
this.name = name
this.age = age
  this.eat = function(food) {
    console.log("eating" + food)
  }
}
const wangWu = new Person("王五",18)
console.log(wangWu)

在上面,我们写了一个简单的构造函数-人,然后我们通过声明了一个wangWu的变量,并使用了new关键字去接收了这个构造函数的返回值。在这期间,new这个关键字究竟做了什么呢?(以下是来源于MDN官网的解释)

接下来,我们研究一下这个四个步骤

  1. var obj = new Object() //创建对象
  2. obj.proto= person.prototype //原型赋值
  3. constructor.call(obj) //修改this的指向为obj
  4. return this //返回
Object.getPrototypeOf(wangWu) === Person.prototype //true

写一个简单的接收对应函数的new方法(无其他参数)

function fakeNew() {
if(typeof(arguments[0]) != 'function') {
  throw Error('第一个参数必须为函数')
}
  //创建一个对象
  var obj = new Object()
  //原型赋值
  obj.__proto = arguments[0].prototype
  //修改this指向
 const res = arguments[0].call(obj)
//如果该函数没有返回对象,则返回this
  return typeof res === 'object' ? res : obj
}