2

私のJavascriptユニバースの端にあるバインディングの問題に遭遇したので、Regisが推奨するように、それを通り抜けて、私の質問にたどり着きます。

function foo() {
    document.body.addEventListener("click", this.bar);
}

foo.prototype.bar = function(evt) {
    alert(this);
}

test = new foo();

関数参照のためにが失われるため、これはdocument.body要素でアラートを出します。thisしたがって、参照は参照bind()を永続化するために使用する必要があります。

function foo() {
    document.body.addEventListener("click", this.bar.bind(this));
}

これは、タイプの予想されるオブジェクトでアラートを出しますfoo


しかし、この表によると、を使用すると、ブラウザの山はうまく機能しませんbind()。私は読んでいますapply()call()、それらは議論のある場合に適用できるようです。bind()ECMAScript5より前のメソッドを使用して、この状況で必要な動作を実現するにはどうすればよいですか?

4

1 に答える 1

2

私自身の答えを与える代わりに、John Resigがここでその方法を説明します。( 1) Our Goalをクリックし、 Nextをクリックします)。

Resig のソリューションは、prototype.js からのものです。実際の ES5 実装に近い実装コードも含めて、 MDN の説明をここで見ることもできます。ただし、ほとんどの目的には十分なはずです。

于 2012-07-13T03:37:20.857 に答える