0

このjsfiddleでは、作成者はカスタム ノックアウト バインディングのテストを記述します。テストの一環として、jQuery を拡張しているようです。

jQueryがプロトタイプで30. $.fn.on = function(event, callback) {定義した可能性のあるものを後でクリーンアップせずに、それがオーバーライドする行についての私の理解はありますか? on36行目とfadeOutについても同じ質問です。

関連するスニペットは次のとおりです。フィドルをチェックして、クリーンアップを探すことができます。

30. $.fn.on = function(event, callback) {
31.   ...
...
36. $.fn.fadeOut = function(speed, callback) {
37.   ...

jqueryに直接関係なく、一般的に質問しています(つまり、jqueryには and が含まれている場合と含まれていない場合がonありfadeOutます)。同様のテストを本番コードに埋め込むことを検討しており、テストでjQueryまたは「実際の」オブジェクトを変更したくありません私のテストはそのように触れているかもしれません。その点で、クリーンアップがあったとしても、他のイベント駆動型 (非同期) 呼び出しが変更された実装でつまずく可能性があるようです - 私は正しいですか?

4

2 に答える 2

1

プロトタイプで定義されたものをオーバーライドするだけでなく、実際に置き換えます。プロパティは、jQuery オブジェクトのプロトタイプの$.fnコピーであり$.fn、実際のプロトタイプ、つまり$.fn === jQuery.prototype.

このような変更をオブジェクトへの独自の呼び出しに分離することはできません。変更が有効である限り、オブジェクトを呼び出す他のコードにも影響します。

ただし、jQuery は厳密にシングル スレッドであるため、プロトタイプを変更し、オブジェクトを使用してからプロトタイプを元に戻すことができ、他のコードは影響を受けません。コードを途切れることなく実行している限り、イベントは処理されません。

于 2013-08-30T15:25:14.477 に答える
0

はい、jQuery のプロトタイプをオーバーライドします。何も拡張せず、$.fnjQuery のプロトタイプ ( core.js の 54 行目)のエイリアスなjQuery.fn = jQuery.prototype = {...}ので、上書きすると$.fn.onjQuery が吹き飛ばされます。

ここでログを見てください: http://jsfiddle.net/LzGmJ/

于 2013-08-30T15:28:15.900 に答える