6.2创建对象
方法:对象字面量 object构造函数
缺点:都是创建单个对象。同一个接口创建多个对象,会产生大量重复代码
6.2.1工厂模式
用函数封装以特定的接口创建对象
function createPerson (name,age) { //返回一个对象的函数就是工厂函数
var obj = {
name: name,
age: age,
sstName: function (name) {
this.name = name
}
}
return obj
}
- 适用场景:需要创建多个对象。
- 缺点: 对象没有一个具体的类型、都是Object类型。
6.2.2构造函数模式
与工厂函数区别:
- 没有return
- 没有显式创建对象
- 直接将属性和方法赋予给this
要创建新实例,必须用new操作符
- 创建一个新对象
- 将构造函数的作用域赋予给新对象(因此this便指向新对象)
- 执行构造函数中的代码(为这个新对象添加属性)
- 返回新对象
function Person (name,age) {
this.name = name
this.age = age
this.setName = function (name) {
this.name = name
}
}
var p1 = new Person('tom',15)
var p2 = new Person('jack',14)
console.log(p1 instanceof Person) //true p1是Person类型
function student (name,grade) {
this.name = name
this.grade = grade
}
var s1 = new student('peter',6)
console.log(s1 instanceof student) //true s1是student类型
console.log(p1,p2)
- 使用场景: 需要创建多个类型确定的对象。(实例标示为以˙哦那个特定的类型)
- 缺点: 每个对象都有相同的数据(方法),浪费内存。