現在、pluralsightの "Advanced Javascript"を見ています。もちろん、「オブジェクト指向」の部分でカイルは私が完全に失われている部分があります:`var self = this`はコードの匂いと考えられますか?
NotesManager.prototype.showHelp = function() {
this.$help.show();
document.addEventListener("click",function() __handler__(evt) {
evt.preventDefault();
evt.stopPropagation();
evt.stopImmediatePropagation();
document.removeEventListener("click", __handler__,true);
this.hideHelp();
},true);
};
this
参照は今this.hideHelp();
が動作しないことになりますボタンになります。彼は修正にthis
問題を言いますが、それは結合していないことができるので、他のproblem.Aboveという名前の関数が使用されている原因
NotesManager.prototype.showHelp = function() {
this.$help.show();
document.addEventListener("click",function() __handler__(evt) {
evt.preventDefault();
evt.stopPropagation();
evt.stopImmediatePropagation();
document.removeEventListener("click", __handler__,true);
this.hideHelp();
}.bind(this),true);
};
:彼は、最初の問題を解決するのは難しい結合溶液をしようとします。しかし彼は、機能の名前は現在結ばれているものではないと述べている。バインドされている関数は新しいハードバインド関数なので、ハードバインド関数への参照がないためアンバインドできません。ハァッ?誰でも説明できますか?彼は詳細には入っていない。彼は問題を解決する最良の方法は、自己参照を使用することで説明してその直後
:
NotesManager.prototype.showHelp = function() {
var self = this;
self.$help.show();
document.addEventListener("click",function() __handler__(evt) {
evt.preventDefault();
evt.stopPropagation();
evt.stopImmediatePropagation();
document.removeEventListener("click", __handler__,true);
self.hideHelp();
},true);
};
一般的に、彼はそれがコードのにおいを示したが、彼はこれが1であることを特徴とするので、これをやってないことをお勧めと言いますその稀な状況の中で最も良い解決策があります。彼は、あなたがthis
の仕組みを実装するのが面倒になったので足で自分自身を撃ったと言うことになり、あなたはレキシカルスコープに戻りました。彼は、自己参照を使用する人々は一般的にどのようにメカニズムが機能するか理解していないと言いました。私は自己参照がコードのにおいであることは聞いたことがありません。私はそれが広く使われているのを見ました。なぜ一般的にコードのにおいを示しているのですか?おそらく、イベントハンドラがある場合にのみ使用するべきでしょうか?
'.bind'は新しい関数を返します。' __handler_.bind(this)!== __handler__'を実行します。残りは、一人の意見です。 –
彼は簡単に 'var __handler__ = function(evt){...} .bind(this);' – Bergi