2

jQuery オブジェクトを期待する関数がありますが、便宜上、セレクター文字列と要素も受け入れたいと考えています。だから私はこのようなことをしています:

test($('.something'));
test('.something');
test($('.something')[0]);

function test (param1) {
  //ensure jquery object
  if (!(param1 instanceof $)) {
    param1 = $(param1);
  }

  //do something with $param1
}

関係なくjQueryオブジェクトを初期化するのは害がありますか、それとも影響やパフォーマンスの問題がありますか?

function test (param1) {
  //ensure jquery object
  param1 = $(param1);

  //do something with $param1
}
4

2 に答える 2

4

どちらも機能します。ただし、最適なオプションを探している場合は、最初の関数を使用する必要があります。これをチェックしてください

アップデート

これは、OPによる修正と、私が考えていなかった追加のテストを1つ加えたパフォーマンスです。

于 2012-12-12T12:58:03.967 に答える
2

jQuery を別の jQuery 要素でインスタンス化すると、後者の浅いコピーが返されます。コンストラクター内で、セレクターが文字列または DOM 要素ではないことを確認した後、herejQuery.makeArray()が呼び出されます。これは、浅いコピーを作成するためにここを呼び出します。jQuery.merge()

特に引数としてjQueryオブジェクトを想定しているため、これは明らかに貴重なサイクルを必要とします。instanceofしたがって、最初に型を決定するために使用する方がはるかに理にかなっています。

どれだけ意味がありますか?引数が jQuery オブジェクトではない可能性が 20% あると仮定すると、型チェックを行うと、パフォーマンスが 6 倍向上します(Chrome に基づく)。

結果を見てください。

于 2012-12-12T13:03:43.223 に答える