在说构造函数之前,先讲讲JS面向对象的创建对象方法,主要有三种: 工厂函数模式,构造函数模式 以及 原型模式。
本篇主要讲构造函数
以工厂函数模式做对比 (此方法违背开闭原则,因此并不推荐)
// 工厂函数模式
function factory(name, age) {
// 创建一个空对象
const obj = {}
// 将用户存入的两个值放到空对象里面
obj.name = name;
obj.age = age
// 返回obj对象
return obj
}
const p = factory('只因', 18)
console.log(p);
总共有三步:1. 创建对象 2. 对象赋值 3. 返回对象
构造函数模式:
// 构造函数模式
function constructor(name, age) {
// this 谁调用它,它就指向谁 (此处的this指向的是 new 出来的实例化对象)
this.name = name
this.age = age
}
const p = new constructor('太美', 18)
console.log(p);
区别:
1.构造函数不用像工厂函数那样声明对象,返回对象。因为new,为我们做了这些操作
。
2.工厂函数,只是一个躯壳,只负责加工生产。不产生原型上的联系(除了构造函数外的所有函数都是工厂函数)
3.构造函数必须要使用 new 不然 this 会指向 window。