私はいくつかのパブリックメソッドといくつかのプライベートメソッドを持つクラスを持っています。パブリックメソッドは "this"にバインドされ、プライベートメソッドは "var"を使用します。JS名前空間スコープ: "var"関数内の "this"は "window"と評価されます
私はクラスの外部からパブリックメソッド "do()"を呼び出し、 "this"は "MyClass"と評価します。しかし、私がさらにprivate( "something()"メソッドを呼び出すと、 "this"はグローバル名前空間 "Window"に評価されます。
function MyClass() {
// private field
var keys = ["foo", "bar"];
// public method
this.method = function(key) {
alert(key);
}
// private method
var something = function() {
console.log("something()");
console.log(this);
$.each(keys, function(idx, key){
this.method(key);
}.bind(this));
}
// public method
this.do = function() {
console.log("do()");
console.log(this);
something();
}
}
var test = new MyClass();
test.do();
フィドル、上記コード:https://jsfiddle.net/lilalinux/13m242ce/8/
私はそれを理解するように、(コンストラクタの内部に割り当てられる)this.doが「特権」機能であり、そのようなものとしてクラス外部から呼び出し可能であるべきであり、そしてprivateメンバー(varsとコンストラクターのパラメーター)にアクセスできるようにする必要があります。
'something'は' MyClass'のインスタンスにassocatedない "自由" 機能、です。 –
"var"や "this"のいずれも使用しないと、 "フリー"な機能だと思っていました。 "var"ではプライベートメソッドのようなものですか?プライベートメソッドを宣言するにはどうすればよいですか? – lilalinux
'var self = this'または' var something = function(){} .bind(this) 'です。 – dfsq