1. 字面量

let obj = {}

缺点:不能批量生成对象

2. 工厂模式

  1. function foo(name,age){
  2. let obj = {}
  3. obj.name = name
  4. obj.age = age
  5. obj.eating = function(){
  6. console.log("在吃饭")
  7. }
  8. }
  9. let p1 = foo("zhangsan",12)

缺点

  1. 通过字面量批量生成对象,无法确定对象的类型

3. 构造函数

  1. function Foo(name,age){
  2. this.name = name
  3. this.age = age
  4. this.eating = function(){
  5. console.log('在吃饭')
  6. }
  7. }
  8. let p1 = new Foo("lisi",13)

通过new操作符执行的函数是构造函数

优点:能够获取对象的类型
缺点:每次创建新的对象的时候,都会将构造函数的方法复制一份新的给这个对象,当创建多个对象时,会额外创建多个相同方法,消耗内存,影响浏览器的性能。

4. 构造函数和原型

  1. function Foo(name,age){
  2. this.name = name
  3. this.age = age
  4. }
  5. Foo.prototype.eating = function(){
  6. console.log('在吃饭')
  7. }
  8. let p1 = new Foo("lisi",13)
  9. let p2 = new Foo("zhangsan",12)

优点:对象可以通过查找原型的方式使用方法,而且在原型上的方法只会创建一次,不会造成内存的浪费