前端小记 前端小记
首页
  • 前端文章

    • HTML
    • CSS
    • JavaScript
    • Vue
  • 学习笔记

    • 《Vue》踩坑笔记
    • TypeScript学习笔记
    • 小程序笔记
    • JavaScript设计模式笔记
  • 工具
  • CentOS
  • Java
  • Docker
  • Linux
  • Maven
  • MySQL
  • 其他
  • 技术文档
  • GitHub部署及推送
  • Nodejs
  • 博客搭建
  • Fullpage全屏轮播插件
  • svn
  • 学习
  • 系统重装
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

sweetheart

前端小记
首页
  • 前端文章

    • HTML
    • CSS
    • JavaScript
    • Vue
  • 学习笔记

    • 《Vue》踩坑笔记
    • TypeScript学习笔记
    • 小程序笔记
    • JavaScript设计模式笔记
  • 工具
  • CentOS
  • Java
  • Docker
  • Linux
  • Maven
  • MySQL
  • 其他
  • 技术文档
  • GitHub部署及推送
  • Nodejs
  • 博客搭建
  • Fullpage全屏轮播插件
  • svn
  • 学习
  • 系统重装
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • HTML

  • CSS

  • JavaScript

    • JavaScript基础
    • JavaScript原型与原型链
    • JavaScript执行上下文
    • JavaScript作用域与作用域链
    • JavaScript闭包
    • JavaScript对象创建模式
      • 方式一:Object 构造函数模式
      • 方式二:对象字面量模式
      • 方式三:工厂模式
      • 方式四:自定义构造函数模式
      • 方式五: 构造函数+原型的组合模式
    • JavaScript继承模式
    • JavaScript线程机制和事件机制
    • JavaScript赋值与浅拷贝与深拷贝解析
    • JS常用的正则表达式
    • html&css实现简单的注册页面
    • JS对注册页面进行表单校验
    • 动态表格&全选
    • 元素拖拽实现
  • Vue

  • 学习笔记

  • 工具

  • 其他

  • 前端
  • JavaScript
sweetheart
2021-06-07
目录

JavaScript对象创建模式

# JavaScript 对象创建模式

# 方式一:Object 构造函数模式

  • 套路: 先创建空 Object 对象, 再动态添加属性/方法。

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

  • 存在的问题: 需要书写的语句太多。

// 先创建空Object对象
let p = new Object();
p = {}; //此时内部数据是不确定的
// 再动态添加属性/方法
p.name = "Tom";
p.age = 12;
p.setName = function (name) {
  this.name = name;
};

//测试
console.log(p.name, p.age);
p.setName("Bob");
console.log(p.name, p.age);
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 方式二:对象字面量模式

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

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

  • 存在问题: 如果创建多个对象, 会出现大量重复代码。

let p = {
    name: "Tom",
    age: 12,
    setName: function (name) {
        this.name = name;
    },
};

    //测试
    console.log(p.name, p.age);
    p.setName("JACK");
    console.log(p.name, p.age);

let p2 = {
    //如果创建多个对象代码很重复
    name: "Bob",
    age: 13,
    setName: function (name) {
        this.name = name;
    },
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 方式三:工厂模式

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

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

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

function createPerson(name, age) {
    //返回一个对象的函数 ===> 均可以称为工厂函数
    let obj = {
        name: name,
        age: age,
        setName: function (name) {
        this.name = name;
        },
    };

    return obj;
}

    // 创建2个人
    let p1 = createPerson("小红", 25);
    let p2 = createPerson("小明", 36);

    // p1/p2是Object类型

    function createStudent(name, price) {
        let obj = {
            name: name,
            price: price,
        };
        return obj;
    }
    let s = createStudent("校长", 12000);
    // s也是Object
    console.log("p1 instanceof Object", p1 instanceof Object);
    console.log("p2 instanceof Object", p2 instanceof Object);
    console.log("s instanceof Object", s instanceof Object);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

# 方式四:自定义构造函数模式

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

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

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

//定义类型
function Person(name, age) {
    this.name = name;
    this.age = age;
    this.setName = function (name) {
        this.name = name;
    };
}
    let p1 = new Person("Tom", 12);
    p1.setName("Jack");
    console.log(p1.name, p1.age);
    console.log(p1 instanceof Person);

function Student(name, price) {
    this.name = name;
    this.price = price;
}
    let s = new Student("Bob", 13000);
    console.log(s instanceof Student);

    let p2 = new Person("ali", 23);
    console.log(p1, p2);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

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

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

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

function Person(name, age) {
    //在构造函数中只初始化一般函数
    this.name = name;
    this.age = age;
}
    Person.prototype.setName = function (name) {
    this.name = name;
    };

    let p1 = new Person("Tom", 23);
    let p2 = new Person("Jack", 24);
    console.log(p1, p2);
1
2
3
4
5
6
7
8
9
10
11
12

注意:这几种对象创建模式并没有具体的优劣之分,应根据自己的实际需求选择适合自己的对象创建模式。

完善页面 (opens new window)
上次更新: 2024-11-28 17:23:47
JavaScript闭包
JavaScript继承模式

← JavaScript闭包 JavaScript继承模式→

最近更新
01
git常用操作手册
12-26
02
常用的前端工具库
12-19
03
前端构建工具
12-19
更多文章>
前端小记 版权所有 | Copyright © 2021-2024
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式