2017-06-10 1 views
0

私はプロトタイプで作業したことがありませんし、それがどのように動作するのか分からないこともあります。javascriptでプロトタイプメソッド.push()を編集する

私はどのように.push()JavaScriptで作品を変更しようとしている:それは最後の要素として、パラメータが追加されますが、私はそれが最初の位置にパラメータを追加します。

はここに私の非稼働の推測です:私はおそらく作られた息をのむようなミス:)のため

Array.prototype.push() = function(e){ 
     var x = [e]; 
     return x.concat(this); 
    } 

申し訳

免責事項:私はネイティブメソッドを変更する方法を理解しようとしている。なぜ誰もが怖がっているのですか?

+0

は、内蔵.unshift '()'メソッドは、配列の先頭に新しい要素を追加する - 任意の理由は、あなたがそれを使用しての代わりに、 '.pushを再定義しようとしていません() '? – nnnnnn

+0

pushは配列の最後の要素を削除しません。新しい要素を配列に追加します – loelsonk

+0

ありがとうございます。私は、削除ではなく、追加と言ったかったのです。私は集中しませんでした。 –

答えて

1

ただ、括弧を失う:

Array.prototype.push = function(e){ 
    var x = [e]; 
    this.unshift(e); 
} 

はEDIT:最初に要素を追加するには

Array.prototype.push = function(e){ 
    var x = [e]; 
var y = []; 
    for(var j = 0; j< this.length; j++) y[j] = this[j]; 
    this[0] = x; 
    for(var i = 0; i < y.length; i++) this[i+1] = y[i]; 
} 
+0

すべてのブラウザがネイティブ関数のオーバーライドをサポートしているとは思えません。 – Prajwal

+0

@Prajwalまあ、私はそうは思わない。ブラウザの例を挙げてください。 – binariedMe

+2

このコードは、呼び出された配列を変更するのではなく、新しい配列を返します。 – nnnnnn

1

あなたが内部のアンシフトを使用したくない場合は、あなたがスプライスを行うことができますポジション使用.unshift。これにはprototypeは必要ありません。

.push()やその他のネイティブメソッドを無効にしたくない場合。

var data = [1,2,3,4,5]; 
 
data.unshift(10); 
 

 
// 10 is first element 
 
console.log(data);

関連する問題