jQuery/JavaScript"こと"ポインタを混乱
-
22-08-2019 - |
質問
行動の"今"が機能 bar
うで枕ました。をコードします。があることができ、"この"とする平野の古いjsのインスタンスオブジェクトがバーと呼ばれらをクリックしハンドラではなく、htmlの要素かどうかが判別されます。
// a class with a method
function foo() {
this.bar(); // when called here, "this" is the foo instance
var barf = this.bar;
barf(); // when called here, "this" is the global object
// when called from a click, "this" is the html element
$("#thing").after($("<div>click me</div>").click(barf));
}
foo.prototype.bar = function() {
alert(this);
}
解決
の世界へようこそjavascript!D
に迷い込んだ領域のjavascriptの範囲にあります。
の答え:
this.bar()
実行される下での範囲 foo, ただし、 この とは foo)
var barf = this.bar;
barf();
実の世界です。
ます。バーは基本的におこなうことができ、
を実行する機能を指摘する。バーの下の範囲 この (foo).ときにコピーされます。バー barf、barf.Javascriptの理解としての機能がbarfとがありませんので この, で走るだけでグローバルです。
修正、変更できます
barf();
うようになります:
barf.apply(this);
これJavascript結の範囲 この にはbarfを実行します。
Jqueryではイベントは、使用する必要があり匿名の機能を延長する場合は、最初に結合する機能の試作を支援スコーピング.
詳細:
他のヒント
QuirksModeするで入手可能なJavaScriptでthis
キーワードの良い説明があります。
本を取得します。グッドパーツ
また、ダグラス・クロックフォードによってあなたができる限り多くを読みます http://www.crockford.com/javascript/する
あなたはを参照してください何Function.apply
設定する機能にthis
を使用することができます:
$("#thing").after($("<div>click me</div>").click(function() {
barf.apply(document); // now this refers to the document
});
これはのこののは、常に機能が接続されているインスタンスです。イベントハンドラの場合には、イベントをトリガしたクラスである。
あなたはこのような無名関数を使って自己を助けることができます:
function foo() {
var obj = this;
$("#thing").after($("<div>click me</div>").click(function(){obj.bar();}));
}
foo.prototype.bar = function() {
alert(this);
}
this.bar(); // when called here, "this" is the foo instance
fooがないコンストラクタとして、通常の関数として使用する場合、このコメントは間違っています。 ここます:
foo();//this stands for window