[英]How to simulate private scope with ES6 classes?
我正在嘗試將我的代碼從ES5模塊遷移到ES6類。 我當前的代碼(模塊,而不是類),如下所示:
var appleModule = (function() {
var yummy = true;
var publicEat = function() { }
var privateEat = function() { }
return { "eat": publicEat }
})();
上面允許我創建私有變量和方法,我不會向我的環境中的其他Javascript對象/作用域公開。 我喜歡。 我想在ES6中我們現在有類,所以像這樣的東西變成了重構的代碼:
exports class appleModule {
constructor {
this.yummy = true;
}
publicEat() {
}
privateEat() {
// How to make private?
}
}
但是,使用這種新的基於類的語法創建私有變量和函數並不是一種好方法。 新建議是否使用帶有先前模塊模式的exports
(公共成員的閉包返回對象)? 如果沒有,我怎么能像第一個例子那樣模擬私有范圍(希望沒有下划線)?
我想在ES6中我們現在有類,所以像這樣的東西變成了重構的代碼。
您的原始代碼似乎代表了類似於模塊的東西。 類不是模塊,但ES6現在具有對模塊的本機支持。 所以你的代碼應該更有可能成為
var yummy = true;
var publicEat = function() { }
var privateEat = function() { }
export {publicEat as eat};
並非一切都可以,已經或應該被建模為一個類。
ES6不提供私有變量的特定功能。 ES6類語法純粹是常規.prototype
上的語法糖,因此使用純ES6語法只會獲得無法訪問私有變量的原型方法。
如果你想要私有變量,你可以像之前那樣在構造函數中定義它們,然后你必須定義想要在構造函數中訪問那些私有的方法(它不會使用新的ES6語法)。
我通常把我不想暴露的函數放在類定義之外,並從類中訪問它:
let privateMethod = function () {
// Some magic and return some value
// ...
return true;
}
class Foo {
constructor {
this.bar = 'baz';
}
publicMethod() {
// Calls method not visible outside to the caller
return privateMethod();
}
}
export Foo;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.