2017-01-30 6 views
-2

私はJavascriptで私の手を試すJava開発者です。私は両者に違いがあることを理解しています。オブジェクト、プロトタイプ、またはクラス(ES6)を使用してデータを結合することができます。しかし、私たちはJavaのようにJavascriptでプライベートクラスのメンバーをどのように獲得できますか?私はクラスの名前と色の属性は猫の宣言の外部からアクセスできるようにしたくない私たちはJavaScriptでプライベートクラスのメンバーをどのように獲得できますか?

function Cat() { 
    this.name = "kitty"; 
    this.colour = "white"; 
} 

var kitty = new Cat(); 

は、例えば私のようなCatクラスが定義されています。

Javascriptでこれを達成する方法はありますか?

+1

SOへようこそ。何をどのように尋ねるかを確認するには、[ヘルプ]をご覧ください。これは現在、努力とコードなしでは話題にはなりません – mplungjan

+1

クラス/オブジェクトはそれをどうやって実現していますか? – deceze

+0

私はあなたが求めていることを理解しているので、データカプセル化とpublic/private/protectedステータスがjavascriptで利用可能かどうかを見ているようです。 javaと同じではなく(つまり、明示的にこれらの用語を使用して)、はいです。 http://www.apress.com/us/book/9781590599082には、専門的なjavascriptリソースの数と同様に、そうする方法について深く掘り下げています。 – Snowmonkey

答えて

1

はい私的なメンバーはjavascriptで可能です。 javascriptはパブリック、プライベート属性をサポートしていませんが。

これを達成するにはさまざまな方法があります。例:閉鎖(上記の例ですでに説明しました)とさまざまなデザインパターン。それらの

一つモジュラーはパターンを明らかにされ、それは次のようになります:

function Cat(){ 
    // PRIVATE MEMBERS 
    var name = 'kitty'; 
    var color = 'white'; 
    var eats = function(){ return true }; 
    // PUBLIC MEMBERS (REVEALED MEMBERS) 
    return { 
    'catName':name, 
    'catEats':eats 
    } 
} 
var catInstance = new Cat(); 
console.log(catInstance.catName); //kitty (public) 
console.log(catInstance.color); //undefined (private) 
1

私はかなり大きな力で

JavaScriptが強力かつ柔軟であると自由のプログラマーの多くを与える大きな責任を付属しています...私はスパイダーマンを引用しようとしてだと信じていますができません。プログラマーが悪いコードを書いてしまうのを止めるための機能は搭載されていません。 JavaScriptを書くときには、言語ではなくコードが適切であることを確認する責任があります。

秘密変数/プロパティは、クロージャを使用して達成できます。

クロージャは、独立した(フリーの)変数 (囲みスコープで定義された変数)を参照する関数です。 つまり、これらの関数は、 が作成された環境を「覚えています」。

var add = (function() { 
    var counter = 0; /// here is your private property/variable 
    return function() {return counter += 1;} 
})(); 

add(); 
add(); 
add(); 

// the counter is now 3 

クロージャ後藤clousers

についての詳細を学ぶためにありがとう! 空腹、迷って愚か:)

関連する問題