Day 17 JavaScript bind vs call vs apply

  • 共同点:
    原本的 this 是指向全域物件 window ,使用 bind、call、apply 可以将 this 指向带入的第一个引数,而第二个引数开始则为一般我们认知上的引数。
  • Function.prototype.bind():
    • 必须将他指派为一个物件(函式)
    • 会建立一个新的函式
    • 引数可带入多个。
const Olympics = {
  event: "羽球",
  player: "小戴"
}

function play(result, review) {
  console.log(`${this.event}比赛结果: ${this.player}${result},${review}`)
}
// 写法1:把引数写在 bind 後面
const badmintonResult = play.bind(Olympics, "赢了", "好棒")
badmintonResult()
// 印出:羽球比赛结果: 小戴赢了,好棒

// 写法2:把引数写在已宣告的物件上
const badmintonResult = play.bind(Olympics)
badmintonResult("赢了", "好棒")
// 印出:羽球比赛结果: 小戴赢了,好棒
  • Function.prototype.call():
    • 可以直接呼叫,不用将他指派为物件。
    • 不会产生新的函式。
    • 引数可带入多个
const Olympics = {
  event: "羽球",
  player: "小戴"
}

function play(result, review) {
  console.log(`${this.event}比赛结果: ${this.player}${result},${review}`)
}

play.call(Olympics, "赢了", "好棒")
// 印出:羽球比赛结果: 小戴赢了,好棒
  • Function.prototype.apply():
    • 可以直接呼叫,不用将他指派为物件。
    • 不会产生新的函式。
    • 引数只能带入一组阵列
const Olympics = {
  event: "羽球",
  player: "小戴"
}
  
function play(result, review) {
  console.log(`${this.event}比赛结果: ${this.player}${result},${review}`)
}
  
play.apply(Olympics, ["赢了", "好棒"])
// 印出:羽球比赛结果: 小戴赢了,好棒

参考:
[1]Function.prototype.bind()
[2]Function.prototype.call
[3]Function.prototype.apply()


<<:  Flutter基础介绍与实作-Day18 FireBase

>>:  Progressive Web App 定期背景同步 (19)

Day 24. 打造可重覆使用的设计-Figma 的 Component 元件解析

在一个网站中,常常会在不同的页面之间看到许多相同共用的元素,比如说按钮、导览列。而在同一个网页中,也...

Android学习笔记29

平常在登入帐号密码的时候,下面常常会有验证码,接着就试着做做看吧 首先先把所有可能出现的字元打进来 ...

连续 30 天 玩玩看 ProtoPie - Day 9

做出左右滑动的互动行为 今天要来操作这个 Container ,其实就可以把它想成「一组」东西就好了...

自我笔记 - Git 日常使用

Git 基础篇 人生不能重来,但Git可以 什麽是git ? 分散式版本控制 使用 SHA1 杂凑演...

Spring Framework X Kotlin Day 17 Reactive

GitHub Repo https://github.com/b2etw/Spring-Kotlin...