new关键字
小于 1 分钟
new关键字
- 创建一个新对象
- 新对象内部[[Prototype]]赋值为 构造函数的prototype属性
- this指向新对象
- 给新对象添加属性
- 如果返回非空对象,则返回该对象;否则,返回刚创建的对象
代码实现
function create() {
// 1.
let obj = new Object()
// 2.
let Con = [].shift.call(arguments) // 获取第一个参数
obj.__proto__ = Con.prototype
// 3&4
let result = Con.call(obj, ...arguments)
// 5
return typeof result === 'object' ? result || obj : obj
}
function Person(name, age){
this.name = name
this.age = age
}
let p = create(Person, 'MOTO', 18)
console.log(p) // Person {name: "MOTO", age: 18}
代码简化
function create(Fn, ...args){
let obj = {};
obj.__proto__ = Fn.prototype
let result = Fn.apply(obj, args)
return typeof result === 'object' ? result || obj : obj
}