從計數器到命名空間:深入了解函式屬性的妙用
1. 儲存計數器
可以利用函式屬性來儲存計算次數或其他狀態資料,例如一個計數器函式來計算被呼叫的次數:
function counter() {
// 增加計數
counter.count++;
console.log(`This function has been called ${counter.count} times.`);
}
// 初始化屬性
counter.count = 0;
// 呼叫函式多次
counter(); // This function has been called 1 times.
counter(); // This function has been called 2 times.
counter(); // This function has been called 3 times.
在這 個例子中,counter.count
這個屬性用來追蹤函式被呼叫的次數。
2. 建立自訂的函式屬性(靜態方法)
可以在函式上定義靜態方法,讓函式本身具備一些輔助功能:
function mathOperations(x, y) {
return x + y;
}
// 新增靜態方法來計算乘法
mathOperations.multiply = function (x, y) {
return x * y;
};
// 使用原本的函式
console.log(mathOperations(2, 3)); // 輸出:5
// 使用靜態方法
console.log(mathOperations.multiply(2, 3)); // 輸出:6
這種作法類似於在類別上定義靜態方法,只是這裡是直接操作函式物件。
3. 函式作為命名空間
在一些情況下,為了避免全域變數污染,可以使用函式作為命名空間,把相關的資料和方法附加在函式上:
function app() {
console.log("Main app function");
}
// 附加屬性和方法
app.version = "1.0.0";
app.init = function () {
console.log("Initializing the app...");
};
// 使用函式
app(); // 輸出:Main app function
// 使用附加的方法和屬性
console.log(app.version); // 輸出:1.0.0
app.init(); // 輸出:Initializing the app...
這種用法模擬了一個命名空間的結構,把所有與 app
相關的功能集中在一個物件之中,讓程式碼更有組織性。
4. 模擬具名的配置項
可以使用函式屬性來模擬具名的配置項,讓函式的行為可以根據外部設定動態調整:
function greet() {
console.log(`Hello, ${greet.defaultName}!`);
}
// 設定預設名稱
greet.defaultName = "World";
// 呼叫函式
greet(); // 輸出:Hello, World!
// 改變預設名稱
greet.defaultName = "Brian";
greet(); // 輸出:Hello, Brian!
在這個案例中,greet.defaultName
可以用來動態設定函式的預設行為,使其更靈活。