web-dev-qa-db-ja.com

array.prototype.Pushとarray.pushの使用

JavascriptでArrayオブジェクトの異なるメソッドを使用する2つの異なる方法を使用している人々を見てきました。

私は主にそのようにそれを使用します:

arr.Push(element1, ..., elementN)

しかし、私はこれを使用している人々を見てきました:

Array.prototype.Push.apply(this,arguments)

すべてのJavaScriptオブジェクトがプロトタイプからプロパティとメソッドを継承していることを理解しています。 Object.prototypeは、プロトタイプチェーンの最上位にあります。

2つのアプローチの違いは何ですか?各アプローチはいつ使用する必要がありますか?

11
Skywalker

.apply()を介した呼び出しは、実際には配列ではないオブジェクトで.Push()を使用することに関心がある場合に使用されます。たとえば、jQueryオブジェクトは実際には配列インスタンスではありませんが、コードはほとんどの場合、配列のように見えるのに十分な.lengthプロパティを維持しています。少なくとも.Push()およびその他の配列プロトタイプメソッドに関する限り。

実際の配列インスタンスの場合、それを行う必要はありません。 .Push()メソッドは、プロトタイプチェーンを介して直接利用できます。

そう:

var obj = { length: 0 };
Array.prototype.Push.apply(obj, ["hello world"]);
console.log(obj[0]); // hello world
13
Pointy

このような関数でArray.prototype.Push.apply(this,arguments)を見たと思います

_function foo() {
    arguments.Push = function() {
       Array.prototype.Push.apply(this,arguments);    
    } 
    arguments.Push(1,2,3);
    //.... 
}
_

これはfooのargumentsです。これは単なる配列のようなオブジェクトであり、配列ではなく、Pushメソッドがありません。したがって、Array.prototype.Push.apply(this,arguments)を使用する必要があります

2
bpceee