1. 字面量
let obj = {}
缺点:不能批量生成对象
2. 工厂模式
function foo(name,age){
let obj = {}
obj.name = name
obj.age = age
obj.eating = function(){
console.log("在吃饭")
}
}
let p1 = foo("zhangsan",12)
缺点
- 通过字面量批量生成对象,无法确定对象的类型
3. 构造函数
function Foo(name,age){
this.name = name
this.age = age
this.eating = function(){
console.log('在吃饭')
}
}
let p1 = new Foo("lisi",13)
通过new操作符执行的函数是构造函数
优点:能够获取对象的类型
缺点:每次创建新的对象的时候,都会将构造函数的方法复制一份新的给这个对象,当创建多个对象时,会额外创建多个相同方法,消耗内存,影响浏览器的性能。
4. 构造函数和原型
function Foo(name,age){
this.name = name
this.age = age
}
Foo.prototype.eating = function(){
console.log('在吃饭')
}
let p1 = new Foo("lisi",13)
let p2 = new Foo("zhangsan",12)
优点:对象可以通过查找原型的方式使用方法,而且在原型上的方法只会创建一次,不会造成内存的浪费