对象创建模式 - js对象高级

Object构造函数模式

  • 方式:先创建空对象,再动态添加属性/方法

  • 适用场景:起始时不确定对象内部数据

  • 问题:语句多

var p = new Object()

p.name = 'Tom'
p.age = 12
p.setName = function (name) {
  this.name = name
}

对象字面量模式

  • 方式:使用{}创建对象,同时指定属性/方法

  • 适用场景:起始时对象内部数据是确定的

  • 问题:如果创建多个对象,有代码重复

var p = {
  name = 'Tom'
  age = 12
  setName = function (name) {
    this.name = name
  }
}

工厂模式

  • 方式:通过工厂函数动态创建对象并返回

  • 适用场景:需要创建多个对象

  • 问题:对象没有一个具体的类型都是Object类型

function createPerson (name, age){
  var obj = {
    name: name,
    age: age,
    setName: function (name) {
      this.name = name
    }
  }
  return obj
}

> 返回一个对象的函数叫做工厂函数

自定义构造函数模式

  • 方式:自定义构造函数,通过new创建对象

  • 适用场景:需要创建多个类型的确定对象

  • 问题:每个对象都有相同的数据,浪费内存

// 定义类型
function Person (name, age) {
  this.name = name
  this.age = age
  this.setName = function (name) {
    this.name = name
  }
}
var p1 = new Person('Tom', 12)

var p2 = new Person('Jack', 15) //二者方法相同

console.log(p1 instanceof Person) //true

构造函数 + 原型的组合模式

  • 方式:自定义构造函数,属性在函数中初始化,方法添加到原型上

  • 适用场景:需要创建多个类型的确定对象

function Person (name, age) {
  this.name = name
  this.age = age
}
Person.prototype.setName = function (name) {
  this.name = name
}

var p1 = new Person('Tom', 23)
var p2 = new Person('Jack', 24)  

posted @ 2021-08-05 17:43  独舟者  阅读(33)  评论(0)    收藏  举报