1. ホーム
  2. javascript

[解決済み] なぜ「$().ready(handler)」が推奨されないのか?

2023-05-04 01:58:14

質問

からの jQuery API ドキュメントサイト に対して ready

以下の3つの構文はすべて等価です。

  • $(document).ready(handler)
  • $().ready(handler) (これは推奨されません)
  • $(ハンドラ)

宿題をした後 - 読んで、遊んだ後に ソースコード を読み、遊んでみたのですが、なぜか

$().ready(handler) 

は推奨されません。 1つ目と3つ目の方法は全く同じですが、3つ目の方法はキャッシュされたjQueryオブジェクトに対してready関数を呼び出します。 document :

rootjQuery = jQuery(document);
...
...

// HANDLE: $(function)
// Shortcut for document ready
} else if ( jQuery.isFunction( selector ) ) {
    return rootjQuery.ready( selector );
}

しかし、ready 関数は選択されたノード要素のセレクタと何の相互作用もありません。 ready のソースコードにあります。

ready: function( fn ) {
    // Attach the listeners
    jQuery.bindReady();
        // Add the callback
    readyList.add( fn );
        return this;
},

見ての通り、コールバックを内部のキューに追加しているだけです( readyList ) にコールバックを追加するだけで、セット内の要素を変更したり使用したりはしません。これによって ready 関数をすべてのjQueryオブジェクトで呼び出すことができます。

のように。

  • レギュラー セレクタを使用します。 $('a').ready(handler) デモ
  • 無意味 セレクタに $('fdhjhjkdafdsjkjriohfjdnfj').ready(handler) デモ
  • 未定義 セレクタに $().ready(handler) デモ

最後に...私の質問に なぜ $().ready(handler) は推奨されないのでしょうか?

どのように解決するのですか?

jQueryの開発者の一人から公式な回答を得ました。

$().ready(fn) が動作するのは $() へのショートカットであったからです。 $(document) (jQuery <1.4)

そこで $().ready(fn) は読みやすいコードでした。

しかし、昔の人はこんなことをやっていました。 $().mouseover() とか、いろいろと狂っていた。

をしなければならず、人々は $([]) を実行して、空の jQuery オブジェクトを取得する必要がありました。

そこで、1.4では、これを $() が空のjQueryを与えるように変更し、単に $().ready(fn) が動作するようにしただけで、多くのコードを破壊することはありません。

$().ready(fn) は文字通り、レガシーケースで適切に動作するようにコアでパッチを当てただけです。

の最適な場所は ready 関数は $.ready(fn) になっていますが、これは本当に古い設計上の決定で、それが今の私たちの姿なのです。


私は彼に尋ねました。

$().ready(fn) よりも $(fn) の方が読みやすいと思いますか!

彼の答えはこうでした。

<ブロッククオート

私はいつも実際のアプリで$(document).ready(fn)をしていますし、通常、アプリには1つのdoc readyブロックしかありませんから、メンテナンスのようなものではありません。

私も$(fn)はかなり読みにくいと思います。 というのは、単に A Thing That You Have To Know Works™ (日本語訳) ...