function Fn(name,age) {
this.name = name;
this.age = age;
}
Fn.prototype.sayName = function () {
console.log(this.name)
}
let obj = new Fn('jack', 21)
console.log(obj.name, obj.age)
obj.sayName()
new 关键字做的事情:
- 返回新创建的对象实例obj
- 向构造函数传参并执行
- 构造函数中的this指向obj
- obj可以访问构造函数原型对象上的属性和方法
由于new是一个关键字,我们用一个方法来模拟实现它
function factoryNew() {
let obj = new Object();
let constructor = Array.prototype.shift.call(arguments)
// obj可以访问构造函数原型对象
obj.__proto__ = constructor.prototype
// 构造函数this指向obj
constructor.apply(obj, arguments)
return obj
}
let obj2 = factoryNew(Fn,'jack', 21)
console.log(obj2.name, obj2.age)
obj2.sayName()