在 JavaScript 中,this 是一個特殊的Keyword,代表了現在執行代碼的目標。然而我們需要在不同的上下文中調用函式,這時就會用到 call、apply 和 bind 這三種方法。
之前有寫過一篇Function函式宣告,有介紹到Arrow Funciton與This的關係>>
JS-函式宣告Function Declared、函式表達Function Express、This – Hugo Habor
在物件方法中,要存取物件本身,我們利用關鍵字 this。
this 的值就是方法的呼叫者,也就是呼叫方法的物件。
https://hsuchihting.github.io/javascript/20200804/4095833756/
https://www.shubo.io/javascript-this/
call 方法用於調用一個函數,並指定函數內的 this 值,以及將函數的參數以參數列表的形式傳遞進去。
// 定義一個物件
const person = {
name: "JzenLiao",
greet: function (greeting) {
console.log(`${greeting}, ${this.name}!`);
},
};
// 定義另一個物件
const anotherPerson = {
name: "Alice",
};
// 使用 call 方法將 greet 函數應用到 anotherPerson 物件上
person.greet.call(anotherPerson, "Hello");
// 輸出: Hello, Alice! 在上面的例子中,
call方法將person物件中的greet函數用到了anotherPerson物件上,同時指定了this的值為anotherPerson。
apply 方法與 call 類似,區別在於參數的傳遞方式。apply 接受一個包含參數的數組。
// 定義一個物件
const person = {
name: "JzenLiao",
greet: function (greeting, punctuation) {
console.log(`${greeting}, ${this.name}${punctuation}`);
},
};
// 定義另一個物件
const anotherPerson = {
name: "Alice",
};
// 使用 apply 方法將 greet 函數應用到 anotherPerson 物件上,並傳遞參數的數組
person.greet.apply(anotherPerson, ["Hello", "!"]);
// 輸出: Hello, Alice! 在這個例子中,
apply方法將greet函數應用到了anotherPerson物件上,同時使用了包含兩個元素的數組作為參數。
bind 方法返回一個新函數,並將指定的 this 值綁定到該函數。這個新函數可以稍後被調用。
// 定義一個物件
const person = {
name: "JzenLiao",
greet: function (greeting) {
console.log(`${greeting}, ${this.name}!`);
},
};
// 定義另一個物件
const anotherPerson = {
name: "Alice",
};
// 使用 bind 方法綁定 greet 函數到 anotherPerson 物件上
const boundGreet = person.greet.bind(anotherPerson);
// 調用新函數
boundGreet("Hola");
// 輸出: Hola, Alice! 在這個例子中,
bind方法創建了一個新的函數boundGreet,這個函數的this值已經被綁定到了anotherPerson物件上。
總結,call、apply 和 bind 是 JavaScript 中用於控制函數中 this 值的三種方法。它們在不同的情境中有不同的應用,初學者可以通過這些例子更好地理解它們的使用方式。熟練掌握這些方法將有助於開發者更靈活地處理函數調用的上下文。
import 與 export 在Node.js 有提到其用法: Node.js require、module以及exports 模組設定 - Hugo Habor 每一個Javascript檔案可當作獨立模組系統(ES Module) 1. Module(模組)…
作者今天遇到一個很奇怪的問題 寫程式寫到一半... 點擊應用程式時... 怎麼都跳不出畫面... 後來查詢了一下是Reg註冊可能被微軟更新給搞掉了... 文章資訊來源: 【以解決】各位.exe檔案打不開,不要相信"在 Windows 7 或 Windows Vista 中無法打開 .EXE 檔案"這篇文章…
Node.js可以提供你很多模組,今天來探索如何使用 Node.js 的 http 模組來架設一個簡單的伺服器。 本篇使用模組require 載入你所需要的模組。這次我們使用'http' 模組來創造一個簡單的server。 資料參考 Node.js - createServer 起手式 - iT…
針對Node.js來談談 require、module以及exports 模組設定。這些概念允許開發者將大型程序分解成小的、可管理的、可重用的部分,稱為模塊。 下面將逐一介紹這些概念,以及它們如何與 JavaScript 關聯。 An Essential Guide to Node.js Modules (javascripttutorial.net) 1. Module(模組)…
像是很多專案必須讀取國家資料中心的metadata,許多檔案格式為CSV、JSON、Html可以利用網頁技術去爬蟲;拿一個範例來嘗試看看就知道這些語法的實際用途。 [主題週]專題報導-開放資料 (Open Data)相關議題與應用 (114230) - Cool3c 在這裡我們使用台北市資料大平台 UBike2.0 作為資料依據! 目的 來抓取空位數量 >15, 抓取空位數量 <15。…