質問

行動の"今"が機能 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キーワードの良い説明があります。

あなたはこれを見つけるかもしれません

jQueryのイベントでthisの値を制御します

またはこの:

http://www.learningjquery.com/2007/08/what -is-この

役立ちます。

JavaScriptを::

本を取得します。グッドパーツ

また、ダグラス・クロックフォードによってあなたができる限り多くを読みます 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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top