3

ここでいくつかのコードを試していますが、

var cat={
    col:"Red",
    getCol:function(){
        document.writeln(this.col);
    }
}

function getCol(){
    document.writeln(cat.col);
}

$(function(){ 
    $("#button1").click(cat.getCol);
    $("#button2").click(getCol);
})

しかし、ボタン1はundefined「赤」、ボタン2は「赤」です。誰かが理由を教えてもらえますか?

に変更すると$("#button1").click(cat.getCol());、必要な「赤」が得られます...

4

2 に答える 2

3

初めに

$("#button1").click(cat.getCol);

この事が実行されているときではない使用undefinedの本体であるため、あなたに与えます。クロスブラウザーの互換性が心配な場合は、ここまたは他のいくつかのバリアントを使用することをお勧めします。「メソッド」をイベント ハンドラーとして設定し、それを囲んでいるオブジェクトにバインドしたままにするという問題に対しては、多くの解決策が公開されています。cat.getColthiscatFunction.prototype.bindthis

$("#button2").click(getCol);

getCol直接使用するため、正常に動作しcatます。

ついに

$("#button1").click(cat.getCol());

はひどく間違っています。式cat.getCol()はを返す呼び出しundefinedです。これは、クリック ハンドラーに設定するのに適した値ではありません。document.write が行われているのを見ましたが、クリックには反応しませんでした。

補遺

バインドを使用したライブ デモ

于 2012-12-13T05:51:49.450 に答える
1

一般に JS ではthis、関数の所有者を指します。したがって、どちらの場合も、その関数が呼び出されると、thisクリックされた要素 (の jQuery オブジェクト) に解決されます。最初のケースでthisは 'cat' ではないため、col は定義されていません。したがって、未定義になります。2 番目のケースでは no this であるため、cat.col は Red に解決されます。

JS関数、これ、匿名関数について読む必要があると思います.. .

これは MDN にあります - https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/this

于 2012-12-13T06:09:18.200 に答える