在本教程中,您將了解 JavaScript 裝飾器並了解它們的內部工作原理和用途。
JavaScript 中的裝飾器是什麼?
裝飾器這個詞意味著將一組程式碼或程式與另一組程式碼或程式組合起來,或者可以說是用另一個函數包裝一個函數以擴展該函數的功能或工作。裝飾器也可以稱為裝飾器函數。
開發人員一直在 Python、C# 等其他語言中使用這個裝飾器術語,現在 JavaScript 也引入了裝飾器。
函數裝飾器
在JavaScript 中,函數的行為類似於對象,因此它們也被稱為一等對象,發生這種情況是因為我們可以將函數分配給變數或從函數返回函數,或者可以將函數作為參數傳遞給函數.
範例
const func_variable= function(){ console.log("Hey there"); } func_variable()
範例
將函數傳遞給另一個函數
// MainFunction function takes a function as a parameter function MainFunction(func) { func() console.log("Main function") } // Assigning function to a variable var argumentFunction = function() { console.log("passed function") } //passing argumentFunction function to to MainFunction MainFunction(argumentFunction)
範例
透過另一個函數傳回一個函數
function SumElement(par1, par2) { var addNumbers = function () { result = par1+par2; console.log("Sum is:", result); } // Returns the addNumbers function return addNumbers } var PrintElement = SumElement(3, 4) console.log(PrintElement); PrintElement()
高階函數
高階函數是指以函數作為參數並在執行某些操作後傳回該函數的函數。上面討論的函數是高階函數,即printAdditionFunc。
範例
// higher order function function PrintName(name) { return function () { console.log("My name is ", name); } } // output1 is a function, PrintName returns a function var output1 = PrintName("Kalyan") output1() var output2= PrintName("Ashish") output2()
你可能會想,我們已經有了裝飾器作為高階函數,那為什麼我們還需要單獨的裝飾器呢?
所以,我們有函數裝飾器,它是一個高階 JavaScript 函數,但是當類別出現在 JavaScript 中時,我們在類別中也有函數,其中高階函數變得失敗,就像裝飾器一樣。
範例
讓我們看看類別的高階函數的問題 -
// higher is a decorator function function higher(arg) { return function() { console.log("First "+ arg.name) arg() // Decorator function call console.log("Last " + arg.name) } } class Website { constructor(fname, lname) { this.fname = fname this.lname = lname } websiteName() { return this.fname + " " + this.lname } } var ob1 = new Website("Tutorials", "Point") // Passing the class method websiteName to the higher order function var PrintName = higher(ob1.websiteName) PrintName()
這裡發生的情況是,當呼叫更高的函數時,它會呼叫其參數,該參數是類別的成員函數,作為此處的 websiteName 函數。由於函數 websiteName 是從外部類別函數呼叫的,因此該函數的值在 websiteName 函數內部未定義。因此,這就是此日誌錯誤背後的原因。
因此,為了解決這個問題,我們也將傳遞 Website 類別的對象,最終將保留 this 的值。
//higher is a decorator function function higher(ob1, arg) { return function() { console.log("Execution of " + arg.name + " begin") arg.call(ob1) //// Decorator function call console.log("Execution of " + arg.name + " end") } } class Website { constructor(fname, lname) { this.fname = fname this.lname = lname } websiteName() { return this.fname + " " + this.lname } } var ob1 = new Website("Tutorials", "Point") //Passing the class method websiteName to the higher order function var PrintName = higher(ob1, ob1.websiteName) PrintName()
在PrintName 函數中,我們透過call 函數呼叫arg (這是一個websiteName 函數),該函數透過Website 類別物件的幫助呼叫websiteName 函數,因此該指標的值將是Website 類別的對象,並且是具有fname和lname 這兩個變量,因此它將正常工作而不會出現任何錯誤。
希望您透過本文的幫助了解裝飾器及其用途。
以上是什麼是裝飾器以及它們在 JavaScript 中如何使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

JavaScript不需要安裝,因為它已內置於現代瀏覽器中。你只需文本編輯器和瀏覽器即可開始使用。 1)在瀏覽器環境中,通過標籤嵌入HTML文件中運行。 2)在Node.js環境中,下載並安裝Node.js後,通過命令行運行JavaScript文件。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver CS6
視覺化網頁開發工具

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SublimeText3 Linux新版
SublimeText3 Linux最新版