仿造new创建对象的过程写一个函数实现
1.创立一个对象
2.执行构造函数,将this指向方才创立的对象
3.如果该构造函数有返回值,且为对象类型,则间接返回该对象
4.将obj的__proto__指向构造函数的prototype,并将obj的__proto__下的constructor指向构造函数
5.返回创立的对象
代码如下:
function newInstance (Fn,...argument) {
// 1.创立一个空对象
const obj = {}
// 2.执行构造函数,并将this指向obj
const result = Fn.call(obj,...argument)
// 3.如果该构造函数的返回值是Object类型则返回该对象
if (result instanceof Object) {
return result
}
// 4.将obj的_proto_指向构造函数的prototype,并将obj的_proto_下的constructor指向构造函数
obj.__proto__ = Fn.prototype
obj.__proto__.constructor = Fn
// 返回该对象
return obj
}
验证实现成果:
function Person (name, age) {
this.name = name
this.age = age
}
Person.prototype.type = 'human'
let person = newInstance(Person,'wade',42)
console.log(person)
发表回复