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官网的解释)
接下来,我们研究一下这个四个步骤
- var obj = new Object() //创建对象
- obj.proto= person.prototype //原型赋值
- constructor.call(obj) //修改this的指向为obj
- 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
}