【9】JavaScript 面向对象高级——对象创建模式

栏目: JavaScript · 发布时间: 6年前

内容简介:方式1: Object构造函数模式方式2: 对象字面量模式方式3: 工厂模式

JavaScript面向对象高级——对象创建模式

一、Object构造函数模式

方式1: Object构造函数模式

  • 流程: 先创建空Object对象, 再动态添加属性/方法。
  • 适用场景: 起始时不确定对象内部数据。
  • 问题: 语句太多。
/*
一个人: name:"Tom", age: 12
 */
// 先创建空Object对象
var p = new Object()
p = {} //此时内部数据是不确定的
// 再动态添加属性/方法
p.name = 'Tom'
p.age = 12
p.setName = function (name) {
  this.name = name
}

//测试
console.log(p.name, p.age) // Tom 12
p.setName('Bob')
console.log(p.name, p.age) // Bob 12

二、对象字面量模式

方式2: 对象字面量模式

  • 流程: 使用{}创建对象, 同时指定属性/方法。
  • 适用场景: 起始时对象内部数据是确定的。
  • 问题: 如果创建多个对象, 有重复代码。
var p = {
  name: 'Tom',
  age: 12,
  setName: function (name) {
    this.name = name
  }
}

//测试
console.log(p.name, p.age)  // Tom 12
p.setName('JACK')
console.log(p.name, p.age)  // JACK 12

var p2 = {  //如果创建多个对象代码很重复
  name: 'Bob',
  age: 13,
  setName: function (name) {
    this.name = name
  }
}

三、工厂模式

方式3: 工厂模式

  • 流程: 通过工厂函数动态创建对象并返回。
  • 适用场景: 需要创建多个对象。
  • 问题: 对象没有一个具体的类型, 都是Object类型。
function createPerson(name, age) { //返回一个对象的函数===>工厂函数
  var obj = {
    name: name,
    age: age,
    setName: function (name) {
      this.name = name
    }
  }
  return obj
}

// 创建2个人
var p1 = createPerson('Tom', 12)
var p2 = createPerson('Bob', 13)
// p1/p2是Object类型

function createStudent(name, price) {
  var obj = {
    name: name,
    price: price
  }
  return obj
}

var s = createStudent('张三', 12000)
// s也是Object类型

四、自定义构造函数模式

方式4: 自定义构造函数模式

  • 流程: 自定义构造函数, 通过new创建对象。
  • 适用场景: 需要创建多个类型确定的对象。
  • 问题: 每个对象都有相同的数据, 浪费内存。
//定义类型
function Person(name, age) {
  this.name = name
  this.age = age
  this.setName = function (name) {
    this.name = name
  }
}

var p1 = new Person('Tom', 12)
p1.setName('Jack')
console.log(p1.name, p1.age)  // Jack 12
console.log(p1 instanceof Person)  // true

// 定义类型
function Student (name, price) {
  this.name = name
  this.price = price
}

var s = new Student('Bob', 13000)
console.log(s instanceof Student)  // true

var p2 = new Person('JACK', 23)
console.log(p1, p2) // Person{age:12, name:"Jack",...}  Person{age:23, name:"Jack",...}

五、组合模式(构造函数+原型)

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

  • 流程: 自定义构造函数, 属性在函数中初始化, 方法添加到原型上。
  • 适用场景: 需要创建多个类型确定的对象。
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)
console.log(p1, p2)

以上所述就是小编给大家介绍的《【9】JavaScript 面向对象高级——对象创建模式》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web Applications (Hacking Exposed)

Web Applications (Hacking Exposed)

Joel Scambray、Mike Shema / McGraw-Hill Osborne Media / 2002-06-19 / USD 49.99

Get in-depth coverage of Web application platforms and their vulnerabilities, presented the same popular format as the international bestseller, Hacking Exposed. Covering hacking scenarios across diff......一起来看看 《Web Applications (Hacking Exposed)》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

html转js在线工具
html转js在线工具

html转js在线工具