4

Modernizrが次のことを行う理由:

toString = {}.toString,
4

2 に答える 2

7

メソッドのローカル コピーObject.prototype.toStringを取得しているため、スクリプトの速度を少し改善できます。toStringこれにより、メソッドが存在することをテストすることもできます。

コメントに関して:

すべての名前解決には、ルックアップ時間 (ローカル、グローバル、プロトタイプ チェーン) と作成 (クロージャー スコープの変数) にコストがかかるため、次のコードをイメージします。

var values = // Create some object here.

for (var i = 0; i < count; i++) {
  console.log(values[i].toString());
}

ルックの反復ごとに、values変数を解決し、プロトタイプ チェーンをたどって member を識別し、toStringそれを実行する必要があります。

上記の例を使用すると、次のことができます。

var toString = {}.toString,
    values = // Create some object here.

for (var i = 0; i < count; i++) {
  console.log(toString.call(values[i]));
}

またはさらに:

var toString = {}.toString,
    log = console.log,
    values = // Create some object here.

for (var i = 0; i < count; i++) {
  log.call(console, toString.call(values[i]));
}

軽量のアプリケーションでは、これによるメリットはあまりありませんが、jQuery などの大規模なフレームワークでは、スクリプトのパフォーマンスを大幅に向上させることができます。IE は、これらの小さな改善が非常に役立つブラウザーの 1 つだと思います。

于 2012-08-29T14:32:49.520 に答える
1

指定された環境下で、オブジェクトにデフォルトで定義された toString プロパティがあるかどうかをチェックします。オブジェクト自体が環境で定義されていない可能性があるため、 new Object() では実行しません。

于 2012-08-29T14:32:34.083 に答える