Modernizrが次のことを行う理由:
toString = {}.toString,
メソッドのローカル コピー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 つだと思います。
指定された環境下で、オブジェクトにデフォルトで定義された toString プロパティがあるかどうかをチェックします。オブジェクト自体が環境で定義されていない可能性があるため、 new Object() では実行しません。