JSではプライベートなものはありませんが、closuresを使用してスコープで再生することができます。
たとえば、あなたの例では、公開プロパティとしてvar1
を公開する必要はありません。彼らは同じ変数にアクセスすることができます - 彼らはctest
、同じ関数内で定義されています -
function ctest() {
var var1 = "haha";
this.func1 = function() {
alert(var1);
func2();
alert(var1);
}
var func2 = function() {
var1 = "huhu";
}
}
func1
両方のでとfunc2
株式同じスコープ:次のように簡単にコードを書き換えることができます。もちろんその場合はvar1
が公開されていないので、myobj.var1
はundefined
になります。
あなたはvar1
は、プロパティとして公開することにしたい場合は、何が必要あなたはコンストラクタで作成されたオブジェクトインスタンスへbindfunc2
です:
function ctest() {
this.var1 = "haha";
this.func1 = function() {
alert(this.var1);
func2();
alert(this.var1);
}
var func2 = function() {
this.var1 = "huhu";
}.bind(this);
}
そうでない場合func2
が異なるコンテキストオブジェクト(this
)を持つことになります。ブラウザはbind
をサポートしていないとあなたが(上記のリンクに示すように)シムを使用したくない場合は、再びクロージャの利点を活用することができます
function ctest() {
this.var1 = "haha";
this.func1 = function() {
alert(this.var1);
func2();
alert(this.var1);
}
var context = this;
var func2 = function() {
context.var1 = "huhu";
}
}
IMVHOはあまりエレガントです。
また、ここに「プライベート」のようなものはありません。 – Alexander
この 'obj.func1()' 'おそらくmyobj.func1(あるべき)' – forsvarir
は@forsvarirええ、それがなければならない - 私は彼のためにそれを修正。 – Alnitak