likes
comments
collection
share

可以不使用new创建对象吗

作者站长头像
站长
· 阅读数 33

背景介绍

这是设计模式系列的第十三节,学习的是里设计模式中Hooks模式内容,由于是资料是英文版,所以我的学习笔记就带有翻译的性质,但并不是翻译,记录的是自己的学习过程和理解

关于设计模式前十二节的内容,在文末会有直达链接。

极简释义

使用函数不使用new关键字创建对象

写在前面

工厂模式,我们可以使用一个函数创建对象,而不使用new关键字。

比如说我们程序中会有很多用户,每个用户都有姓有名,邮箱等属性,可以用工厂模式实现:

const createUser = ({ firstName, lastName, email }) => ({
  firstName,
  lastName,
  email,
  fullName() {
    return `${this.firstName} ${this.lastName}`;
  },
});

const user1 = createUser({

**firstName**: "John",

lastName: "Doe",

email: "john@doe.com"

});

const user2 = createUser({

firstName: "Jane2",

lastName: "Doe2",

email: "jane@doe.com"

});

console.log(user1);//{...}
console.log(user2.fullName()); //Jane2 Doe2

现在我们就可以调用createUser来创建用户对象了,并且新对象调用fullName方法获取全名了。

在线调试

工厂模式在创建相对复杂些并且可配置的对象时是很有效的。另外当有些对象的依赖配置得出时,也可以使用工厂模式轻松地创建:

const createObjectFromArray = ([key, value]) => ({
  [key]: value,
});
 
createObjectFromArray(["name", "John"]); // { name: "John" }

总结

工厂模式对于创建多个共享属性且相对较小对象时是很有用的。工厂模式可以轻松地创建依赖环境或者用户配置的对象。

在JavaScript中,工厂模式仅仅是一个不使用new关键字,来创建对象的方法。ES6的箭头函数可以隐式返回一个简易的工厂方法。

通常情况下,使用工厂模式比使用new关键字更节约内存

上面的案例使用new关键字实现如下:

class User {
  constructor(firstName, lastName, email) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.email = email;
  }
 
  fullName() {
    return `${this.firstName} ${this.lastName}`;
  }
}
 
const user1 = new User({
  firstName: "John",
  lastName: "Doe",
  email: "john@doe.com",
});
 
const user2 = new User({
  firstName: "Jane",
  lastName: "Doe",
  email: "jane@doe.com",
});

设计模式相关推荐

第一节:单例模式:高并发造成的数据统计困难?看我单例模式一招制敌

第二节:替身模式:JS和迪丽热巴一样有专业替身?没听过的快来补补课...

第三节:供应商模式:还在层层传递props?来学学非常实用的供应商模式吧

第四节:原型模式:都知道JavaScript原型,但设计模式里的原型模式你会用吗?

第五节:视图和逻辑分离模式:React Hooks时代,怎么实现视图与逻辑分离呢?

第六节:观察者模式:是时候拿出高级的技术了————观察者模式

第七节:模块化模式:前端性能优化进阶篇——动态加载模块基础补遗

第八节:混合模式:在React Hook时代,Object.assign这种混合写法还要用吗?

第九节:中间件模式:如何使用中间件优化多对多通信?

第十节:高阶组件模式:在React Hooks时代,高阶组件只能感叹:既生瑜何生亮?

第十一节:传递render方法模式:如何在提升state的层级时,避免父级子组件重新渲染问题

第十二节:React Hooks:和React Hook相比class Component到底差在哪 

第十三节:享元模式:什么?没听说过享元模式,快来学学

相关活动

转载自:https://juejin.cn/post/7210375037115531320
评论
请登录