跳至主要内容

從計數器到命名空間:深入了解函式屬性的妙用

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 可以用來動態設定函式的預設行為,使其更靈活。