js构造模式的解释和例子和优缺点

JavaScript 构造模式 是一种创建对象的模式,它使用构造函数来创建具有特定属性和方法的对象。这种模式在 JavaScript 中非常常见,因为它允许我们创建可复用的对象模板。js 中每⼀个函数都可以作为构造函数,只要⼀个函数是通过 new 来调⽤的,那么我们就可以把它称为构造函数。执⾏构造函数⾸先会创建⼀个对象,然后将对象的原型指向构造函数的 prototype 属性,然后将执⾏上下⽂中的 this 指向这个对象,最后再执⾏整个函数,如果返回值不是对象,则返回新建的对象。因为 this 的值指向了新建的对象,因此我们可以使⽤ this 给对象赋值。构造函数模式相对于⼯⼚模式的优点是,所创建的对象和构造函数建⽴起了联系,因此我们可以通过原型来识别对象的类型。 但是构造函数存在⼀个缺点就是,造成了不必要的函数对象的创建,因为在 js 中函数也是⼀个对象,因此如果对象属性中如果包含函数的话,那么每次我们都会新建⼀个函数对象,浪费了不必要的内存空间,因为函数是所有的实例都可以通⽤的。

解释

在构造模式中,我们首先定义一个构造函数,该函数用于初始化新创建的对象的状态。然后,我们使用 new 关键字和该构造函数来创建新的对象实例。

例子

下面是一个简单的构造模式的例子:

javascript

// 定义一个构造函数

function Person(name, age) {

    this.name = name;

    this.age = age;

    this.greet = function() {

        console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`);

    };

}

 

// 使用 new 关键字和构造函数创建对象实例

var person1 = new Person('Alice', 25);

var person2 = new Person('Bob', 30);

 

// 访问对象的属性和方法

console.log(person1.name); // 输出 "Alice"

console.log(person2.age); // 输出 "30"

 

// 调用对象的方法

person1.greet(); // 输出 "Hello, my name is Alice and I'm 25 years old."

person2.greet(); // 输出 "Hello, my name is Bob and I'm 30 years old."

优缺点

优点:

封装性:构造函数封装了对象的初始化代码,使得代码更加整洁和可维护。

复用性:通过调用同一个构造函数并传递不同的参数,我们可以创建多个具有相似属性和方法的对象实例。

灵活性:构造函数可以根据需要添加或修改对象的属性和方法。

缺点:

性能问题:如果构造函数中定义了方法,那么每次创建新对象时都会重新创建这些方法,这可能导致内存浪费。这种问题在大型应用程序中尤为突出。

继承不直观:虽然 JavaScript 支持原型链继承,但使用构造模式时,继承的实现可能不如其他模式(如原型模式或组合模式)直观和简单。

为了解决构造模式中方法重复创建的问题,我们通常会将方法定义在构造函数的原型上,这样所有通过该构造函数创建的对象实例都可以共享这些方法,从而节省内存。这种改进后的模式通常被称为“构造函数+原型”模式或“组合模式”。

 

相关推荐

  1. js构造模式解释例子优缺点

    2024-04-28 08:58:01       15 阅读
  2. js实例继承例子优缺点

    2024-04-28 08:58:01       29 阅读
  3. js寄⽣组合继承优缺点

    2024-04-28 08:58:01       33 阅读
  4. ViteWebpack优缺点

    2024-04-28 08:58:01       43 阅读
  5. var let 优缺点

    2024-04-28 08:58:01       40 阅读
  6. React Vue优缺点

    2024-04-28 08:58:01       35 阅读
  7. jpa mybatis 优缺点

    2024-04-28 08:58:01       12 阅读
  8. js编码解码

    2024-04-28 08:58:01       34 阅读
  9. js toPrecision() toFixed() 方法是什么例子

    2024-04-28 08:58:01       33 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-28 08:58:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-28 08:58:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-28 08:58:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-28 08:58:01       20 阅读

热门阅读

  1. PostgreSQL的扩展(extensions)-常用的扩展之PostGIS

    2024-04-28 08:58:01       13 阅读
  2. js动态设置css主题(Style-setProperty)

    2024-04-28 08:58:01       12 阅读
  3. js 延迟加载的⽅式有哪些

    2024-04-28 08:58:01       12 阅读
  4. 最短路(Dijkstra, Bellman-Ford, SPFA, Floyd)

    2024-04-28 08:58:01       11 阅读
  5. 数据结构与算法-图论-DFS/BFS

    2024-04-28 08:58:01       13 阅读
  6. 【笔记】 - Git

    2024-04-28 08:58:01       11 阅读
  7. isort库,一款超级神奇排序和格式化Python工具

    2024-04-28 08:58:01       14 阅读
  8. 解决eureka服务注册名报错

    2024-04-28 08:58:01       13 阅读
  9. 数字化转型之路:企业信息化建设的关键步骤

    2024-04-28 08:58:01       14 阅读
  10. HTML实体编码

    2024-04-28 08:58:01       11 阅读
  11. 多进程控制

    2024-04-28 08:58:01       21 阅读
  12. C++ 如何高效的使用 STL 容器?

    2024-04-28 08:58:01       17 阅读