应用: 实例化构造函数,也称new 一个对象
function Person (name,age){
this.name = name
this.age = age
}
const xiao = new Person('小敏',12)
console.log('xiao',xiao.name, xiao.age) // xiao 小敏, 12
手写new
- 新建一个空对象
- 新建对象的隐式原型指向构造函数的显示原型
- 改变构造函数中this指向并赋值
- 返回当前对象
function F (name) {
this.name = name
this.age = age
}
function myNew (fn){
let result = {} // 新建一个空对象
let args = Array.prototype.slice.call(arguments,1) // 拿到传入的参数
Object.setPrototypeOf(result, fn.prototype) // 将空对象的__proto__ 指向构造函数的prototype
fn.apply(result, args) // 修改构造函数中this的指向,使其指向新建对象,并赋值
return result // 返回当前新建对象
}
// 调用
const user = myNew (F,'小敏', 12)
console.log(user.name, user.age) // '小敏', 12
console.log(user.__proto__ === F.prototype) // true