在 JavaScript 中建立私有屬性
本文將解釋 ES6 類、使用 ES6 類的私有屬性,以及如何在 JavaScript 中建立和宣告這些私有屬性。此外,討論和解釋了在 JavaScript 中實現 private
關鍵字的不同方法。
JavaScript 中的 ES6 類
物件導向是一種基於現實世界建模的程式設計正規化。它將程式視為通過方法進行通訊的物件的集合。
ES6 也支援這些物件導向的元件。
在 ES6 中,class
關鍵字可用於構建類。宣告類或利用類表示式可用於將它們包含在程式碼中。
語法:
class Class_name {
}
//declaring a class
var var_name = new Class_name {
}
//class expression
JavaScript 中的公共屬性
關鍵字 this
在 JavaScript 中宣告公共屬性和方法。它們可以在指定函式的內部和外部訪問。
JavaScript 中的私有屬性
在物件導向的語言中,private
關鍵字是一個訪問修飾符,它限制對指定類中的屬性和方法的訪問。這使得隱藏應該被窺探而不是在教室外參與的潛在邏輯變得簡單。
但是,使用 JavaScript,你怎麼能達到同樣的效果呢?private
不是保留關鍵字;相反,它只能用作變數。
語法:
const private = 'private';
private.js
//private is not a reserved keyword, and you can set it to anything.
在 JavaScript 中建立私有屬性的不同方法
幸運的是,有一些解決方案可以在 JavaScript 中實現私有屬性和函式。實現私有屬性的方法如下:
在 JavaScript 中使用 closure()
建立私有屬性
使用 closure()
是在 JavaScript 中實現私有屬性的選擇之一。可以訪問周圍函式變數的內部函式稱為閉包。
例子:
(function one() {
var a = 'Hello World';
// The scope of the outer function is accessible to this inner function.
(function two() {
console.log(a); // This will give output of "Hello World"
})();
})();
輸出:
你可以訪問此連結以檢視此程式碼的工作情況。這意味著將變數分配給最頂層的自呼叫函式呼叫,並且僅通過函式返回公開其內部函式的一部分。
在 JavaScript 中使用 ES6 類建立私有屬性
ES6 類本身不支援私有屬性。但是,你可以通過將新屬性放在類函式 Object() { [native code] }
中來獲得類似的效果。我們可以利用 getter 和 setter 來訪問隱藏的屬性,而不是將它們附加到物件上。
值得注意的是,該類的每個新例項都重新定義了 getter 和 setter。你可以利用 ES6 中引入的 class
關鍵字來使你的程式碼更類似於 OOP 方法。
在你的類之外宣告屬性和方法以使它們成為私有的。
例子:
class Person {
constructor(name) {
var _name = name
this.setName = function(name) { _name = name; }
this.getName = function() { return _name; }
}
}
在 JavaScript 中使用最新的 ECMAScript 提案建立私有屬性
以後也許可以使用官方的方式使用私有欄位。目前,這是在撰寫本文時的第 3 階段提案。
有了今天最新版本的 Babel,你已經可以使用它了。要定義私有屬性或方法,請在它們前面加上一個雜湊。
例子:
class Something {
#property;
constructor(){
this.#property = "test";
}
#privateMethod() {
return 'hello world';
}
getPrivateMessage() {
return this.#property;
}
}
const instance = new Something();
console.log(instance.property); // It will show "undefined"
console.log(instance.privateMethod); // This will show "undefined"
console.log(instance.getPrivateMessage()); // This will show "test"
你可以點選這個連結來觀看上面程式碼段的執行。
在 JavaScript 中從私有屬性訪問公共屬性
你必須明白,這是一個 MODULE,而不是一個需要例項化的類。要從私有屬性訪問公共屬性,請使用 self.
在公共方法/變數中,在私有方法中沒有任何內容,它都會起作用。
例子:
var PersonModule = (function(){
var self = {};
var privateChangeNameToBob = function(){
self.name = "World";
};
self.sayHello = function(){
console.log("Hello " + self.name);
};
self.changeName = function(){
privateChangeNameToBob();
};
self.name = "";
return self;
})();
PersonModule.name = 'Test';
PersonModule.changeName();
PersonModule.sayHello();
輸出:
單擊此連結以訪問此程式碼的執行。