[笔记] JavaScript 的基本观念 – 14 – call()、apply() 与 bind()

章节连结

Call, apply 和 bind 这三个内建函式,主要是用于设定 this 的范围。当你呼叫一个函式时,你可以借机改变 this 的范围,将你想要的参数传入。在你撰写一些数学运算函式时,可以省去你重复撰写的麻烦。
javascript es6 logo


课程对应章节

Course 50 ~ Course 52 (全部一共有 85 Courses)

请注意:本系列文章为个人对应课程的消化吸收后,所整理出来的内容。换言之,并不一定会包含全部的课程内容,也有可能会添加其他资源来说明。课程连结网址:http://tinyurl.com/w7vrql6

内容

1. 这三者在呼叫时,都会将第一个传入的物件当作 this 的新范围。
2. 物件本身内的 this,会是指向物件本身。不过若你是在函数内使用 this,在默认的情况下,会指向 global object。这在使用上会容易造成误解和困扰。
3. 若你在物件内的某项的回传函式内,使用了 this,那么 JavaScript 会将这个 this 指向 global object。因此,你会看见像是 self = this ,这样的用法出现在物件中,就是为了保存当下 this 指向物件本身的状态。
4. bind() :可在 function 后方直接使用,并代入新的物件当作 this 的新范围。
5. call():第一个引数是新的物件范围,后面可以紧接代入函数所需的(默认)参数。换言之,你不一定要给定所有参数,你可以用这个特性造出许多架构类似的函式,而不用一直重复撰写。
6. apply():跟 call() 很像,但后头的参数要以 array 代入。
7. bind()仅复制原本的函式架构,所以要启用还是要加上()。不过 call() 和 apply () 则是会主动执行,所以就不用加 ()。


JavaScript 全攻略系列文章

  • [笔记] JavaScript 的基本观念 – 20 – something new 新玩意
  • [笔记] JavaScript 的基本观念 – 19 – 检视 / 建立框架 view & build a framework
  • [笔记] JavaScript 的基本观念 – 18 – 其他 miscellaneous
  • [笔记] JavaScript 的基本观念 – 16 – new 和 constructor function 函数建构子
  • [笔记] JavaScript 的基本观念 – 15 – prototype, reflection & extend
  • [笔记] JavaScript 的基本观念 – 13 – Closure 闭包
  • [笔记] JavaScript 的基本观念 – 12 – IIFE
  • [笔记] JavaScript 的基本观念 – 11 – Array, Syntax, Semicolon
  • [笔记] JavaScript 的基本观念 – 10 – this
  • [笔记] JavaScript 的基本观念 – 9 – 函数与物件 Function and Object
  • [笔记] JavaScript 的基本观念 – 8 – Boolean & if/else
  • [笔记] JavaScript 的基本观念 – 17 – 内建函数建构子
  • [笔记] JavaScript 的基本观念 – 7 – 运算子
  • [笔记] JavaScript 的基本观念 – 6 – 型别
  • [笔记] JavaScript 的基本观念 – 5 – Asynchronous
  • [笔记] JavaScript 的基本观念 – 4 – Variable Environment
  • [笔记] JavaScript 的基本观念 – 3 – Execution Stack
  • [笔记] JavaScript 的基本观念 – 2 – undefined
  • [笔记] JavaScript 全攻略:克服 JS 的奇怪部分
  • [笔记] JavaScript 的基本观念 – 1 – Hoisting
  • 按赞加入粉丝团

    延伸阅读