JavaScript 中的全域性和私有函式
可以全域性呼叫的函式稱為全域性函式,而我們不能直接在類/模組之外呼叫私有函式。
在本文中,我們將使用三個檔案:index.html、fileOne.js 和 fileTwo.js。
index.html 的啟動程式碼如下所示,因為它將在本文中保持不變。
index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script src="./fileOne.js"></script>
<script src="./fileTwo.js"></script>
<title>Document</title>
</head>
<body>
<button id="greet" onclick="greetings()">Display Greetings</button>
<p id="displayGreet"></p>
</body>
</html>
在 JavaScript 中實現全域性和私有函式
如果我們直接在 JavaScript 檔案中編寫函式,它將被限制為全域性的 window 物件。這意味著該功能也將是全域性的。
fileOne.js:
function displayName() {
let firstName = 'Mehvish';
let lastName = 'Ashiq';
return firstName + ' ' + lastName;
}
fileTwo.js:
function greetings() {
document.getElementById('displayGreet').innerHTML = 'Hi! ' + displayName();
}
只要我們點選 Display Greetings 按鈕,greetings() 函式就會被呼叫,它直接呼叫 displayName(),它在 fileOne.js 檔案中定義,因為它是一個全域性函式。
它獲取 displayName() 返回的值並更改 id 為 displayGreet 的元素的 innerHTML。
考慮私有函式並將 displayName() 函式設為私有。為此,我們可以建立一個包含此函式的物件,如下所示。
fileOne.js:
myfunctions = {
displayName: function displayName() {
let firstName = 'Mehvish';
let lastName = 'Ashiq';
return firstName + ' ' + lastName;
}
// you can add more functions here
}
現在,問題是如何在 fileTwo.js 中呼叫它,因為 displayName() 現在是一個私有函式?我們可以呼叫它作為 myfunctions.displayName()。
fileTwo.js:
function greetings() {
document.getElementById('displayGreet').innerHTML =
'Hi! ' + myfunctions.displayName();
}
在 JavaScript 類中實現 Global 和 Private 函式
假設我們在 fileOne.js 中有一個名為 oneClass 的類。我們現在如何使 displayName() 成為私有和全域性的?
fileOne.js:
class oneClass {
constructor() {}
displayName = function displayName() {
let firstName = 'Mehvish';
let lastName = 'Ashiq';
return firstName + ' ' + lastName;
}
// you can write more functions
}
fileTwo.js:
function greetings() {
const one = new oneClass();
document.getElementById('displayGreet').innerHTML =
'Hi! ' + one.displayName();
}
在這裡,我們建立類 oneClass 的例項並將其引用儲存在 one 中。
我們可以通過使用 one 例項類物件直接呼叫 displayName(),因為 displayName() 是一個公共函式,也稱為全域性函式。
fileOne.js:
class oneClass {
constructor() {}
#displayName = function displayName() {
let firstName = 'Mehvish';
let lastName = 'Ashiq';
return firstName + ' ' + lastName;
} getDisplayName() {
return this.#displayName();
}
// you can write more functions
}
fileTwo.js:
function greetings() {
const one = new oneClass();
document.getElementById('displayGreet').innerHTML =
'Hi! ' + one.getDisplayName();
}
在這裡,我們使用 # 符號來表示這個特定的函式是私有的,並且我們知道我們不能直接訪問它。
我們將在可以訪問 #displayName 的類中編寫另一個函式 getDisplayName()。
這樣,我們通過 fileTwo.js 中的 getDisplayName() 獲取 #displayName 的值。你可以在此處找到更多詳細資訊。
