5

他の人のスクリプトで次のようなものをよく見かけます。

bar = Array.prototype.slice.call(whatever, 1)

ただし、次の短い表記法も問題なく機能します。

bar = [].slice.call(whatever, 1)

これら 2 つの構造は完全に同等ですか? それらを異なる方法で処理するエンジン (ブラウザー) はありますか?

4

2 に答える 2

5

はい、完全に同等です。

.prototype新しいオブジェクト インスタンスを作成する必要がないため、経由でのアクセスの方がわずかに高速です。ただし、それはマイクロ最適化と呼ばれるものです。


ディープ チェーンを完全に取り除く良い方法は、 を呼び出すことFunction.prototype.bindです。

(function( slice ) {
    slice( whatever, 1 );
}( Function.prototype.call.bind( Array.prototype.slice )));
于 2013-04-11T15:51:55.823 に答える
1

厳密に言えば、それらは同等ではありません。この構造:

[].slice.call(whatever, 1)

ヒープからプロパティを取得するためだけに、配列の新しいインスタンスをヒープに割り当てます。したがって、副作用があります-ヒープにガベージを残します。

于 2013-04-11T15:58:44.260 に答える