1

これは難しいかもしれませんが、これを説明することができます。これを見てみましょう:

<a onclick="jsFunction (1, 'a', function() { callback(this); }"></a>

<a>コールバックは、この呼び出しがどこから来たかを知る必要があります。しかし、この「これ」は私が望む「これ」ではありません。少し回避策があります、私は知っています:

<a onclick="var _this = this; jsFunction (1, 'a', function() { callback(_this); }"></a>

でも運が悪いと思います。より良い解決策はありますか?

4

3 に答える 3

3

bindを使用すると、少し面倒なことはできますが、それほど多くはありません。

<a onclick="jsFunction (1, 'a', (function(){callback(this);}).bind(this))"></a>

これは、HTML で JavaScript コードをインライン化しない方が一般的に望ましい多くの理由の 1 つです。

私は一般的にこれを書くことを好みます:

<a id=someid></a>

<script>
    $('#someid').click(function(){
        var _this=this;
        jsFunction (1, 'a', function() { callback(_this); });
    });
</script>
于 2013-01-02T11:36:00.390 に答える
1

「不運」という言葉の意味がわかりませんが、それは完全に有効で一般的な方法です。

別の方法は、次のbindメソッドを使用することです。

function() { /* use this as usual here */ }.bind(this);

古代のブラウザーをサポートしたい場合は、そのうちの 1 つ「ポリフィル」を使用する必要があります (親しみやすい近所の Google から入手できます)。

また、HTML 内にコードを配置しないことを検討してください。ぐちゃぐちゃになるのが早い。

于 2013-01-02T11:35:33.913 に答える
0

Javaのような真のOOベースの言語の世界に入ると、ポリモーフィズムなどでこれを異なる方法で行う方法がわかりますが、それでもほとんどの場合、実行したとおりに実行し、関数スコープに変更する前に「this」を割り当てます。

「this」はスコープに基づくキーワードなので、objHandel = thisなどを割り当てるのは理にかなっているので、問題ありません。「これ」はあなたがどこにいるかによって変わります。

いずれにせよ、あなたのコードはまだ有効で問題ないと思います...そしてスクリプト言語でそれが機能していれば、これまでのところかなり幸運だと思います:p

〜ダン

于 2013-01-02T11:39:24.200 に答える