(Day15) 闭包进阶使用,工厂模式及私有方法。

上回介绍闭包概念以及闭包大致运用,这次则介绍实做比较常用闭包的几种模式

工厂模式

上个章节有介绍到,使用不同变数可以让闭包储存的记忆体分开,在透过不同参数可以达成需要重复运行,却需要不同值做呈现、运算的部分,比如下面范例。

function interview(name,office){
	return function(){
	  return console.log(`我的名字是 ${name},我是来应徵 ${office}`)
	  }
}
const Ryder = interview('Ryder','前端工程师')
Ryder() // 我的名字是Ryder,我是来应徵 前端工程师

const Jason = interview('Jason','专案经理')
Jason() //我的名字是Jason,我是来应徵 专案经理

const Emma = interview('Emma','品管工程师')
Emma() //我的名字是 Emma,我是来 品管工程师

私有方法 又称 模组设计模式(module pattern)

上一章节也有提到,最简单的闭包就是在函示中 return 一个函示,而私有方法 则是 return 出一个物件,再将各种函示包在物件中,这样就可以呼叫物件中各式不同的方法,以达成实做时的各种需求,并且和工厂模式相同,使用不同变数、常数闭包储存的记忆体也会不同,因此可以透过不同参数达成各自独立计算的需求。

function buyGame(initValue){
  let money = initValue||0
  return {
    buyNS(){
      money = money - 9000
    },
    buyPS5(){
      money = money - 15000
    },
    remainMoney(){
      return money
    }
  }
}
const Ryder = buyGame(30000)
Ryder.buyNS()
Ryder.buyNS()
console.log(Ryder.remainMoney()) //Ryder 买了两台 NS 剩 12000

const Emma = buyGame(50000)
Emma.buyNS()
Emma.buyPS5()
console.log(Emma.remainMoney()) //Emma 买了一台 NS 一台 PS5 剩下26000

P.S 这边的 buyNS()buyPS5() 是使用物件函式缩写,未缩写前是 buyNS:fuction()buyPS5: function()

参考文献

  • JavaScript 核心篇 (六角学院)

<<:  【DAY 01】 学习网页的第一步

>>:  Day 15 关键字二三事

整理6个媒体产业在机器学习应用的趋势

在媒体、娱乐和创意产业中,机器学习与人工智能的使用越来越多。不管是管理数位内容、提供创作者新的灵感等...

新新新手阅读 Angular 文件 - Day07

学习目标 本文章将会是阅读官方文件Add navigation with routing 内容所做的...

Make it easy to achieve CompTIA 220-1001 Exam Dumps certification

IT business is one of the most famous in the busin...

Kotlin Android 第21天,从 0 到 ML - Retrofit and Repository

前言: 说到呼叫 API 的方法,那就一定会提到 Retrofit 这个无人不知,无人不晓的第三方的...

【Day24-序列】时间序列型资料的基本处理——以0050股票价格为例:寻找峰值、移动平均、曲线拟合

前面我们虽然有讲到除了基本的数值类型资料以外,一共主要会有文字、图片、声音这三大类型,而在数值类型的...