Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中编辑原型方法.push()_Javascript_Methods_Parameters_Prototype - Fatal编程技术网

在javascript中编辑原型方法.push()

在javascript中编辑原型方法.push(),javascript,methods,parameters,prototype,Javascript,Methods,Parameters,Prototype,我从未使用过原型,也许我甚至不知道它是如何工作的,所以我来了 我正在尝试更改.push()在javascript中的工作方式:它将参数添加为最后一个元素,但我希望它将参数添加到第一个位置 以下是我的非工作猜测: Array.prototype.push() = function(e){ var x = [e]; return x.concat(this); } 为我可能犯的惊人错误感到抱歉:) 免责声明:我只是想了解如何修改本机方法。为什么每个人都这么

我从未使用过原型,也许我甚至不知道它是如何工作的,所以我来了

我正在尝试更改.push()在javascript中的工作方式:它将参数添加为最后一个元素,但我希望它将参数添加到第一个位置

以下是我的非工作猜测:

    Array.prototype.push() = function(e){
      var x = [e]; 
      return x.concat(this);
    }
为我可能犯的惊人错误感到抱歉:)


免责声明:我只是想了解如何修改本机方法。为什么每个人都这么害怕?

别插嘴了:

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

如果不想在内部使用“取消移动”,可以执行以下操作:

 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];
}
Array.prototype.push=函数(e){
var x=[e];
变量y=[];
对于(var j=0;j
松开括号:

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

如果不想在内部使用“取消移动”,可以执行以下操作:

 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];
}
Array.prototype.push=函数(e){
var x=[e];
变量y=[];
对于(var j=0;j
要在第一个位置添加元素,请使用
.unshift
。您不需要
prototype

您不希望重写
.push()
或任何其他本机方法

var数据=[1,2,3,4,5];
数据。取消移位(10);
//10是第一要素

控制台日志(数据)要在第一个位置添加元素,请使用
.unshift
。您不需要
prototype

您不希望重写
.push()
或任何其他本机方法

var数据=[1,2,3,4,5];
数据。取消移位(10);
//10是第一要素


控制台日志(数据)
内置的
.unshift()
方法会将新元素添加到数组的开头-您为什么不使用它而不是尝试重新定义
.push()
?push不会删除数组中的最后一个元素,它会将新元素添加到数组的存储库中以获取答案。我想说的是添加,而不是删除。我没有集中注意力。关于你的编辑,现在你说你想让它在“最后一个位置”添加参数,但这正是
.push()
已经做的(至少,它不会覆盖任何已经在最后一个位置的内容,它会在后面附加,但是…)。哦,伙计,我需要多睡一会儿哈哈,对不起。内置的
.unshift()
方法将新元素添加到数组的开头-您为什么不使用它而不尝试重新定义
.push()
?push不会删除数组中的最后一个元素,它会将新元素添加到数组存储库中以获取答案。我想说的是添加,而不是删除。我没有集中注意力。关于您的编辑,现在您说希望它在“最后一个位置”中添加参数,但这正是
.push()
已经做的(至少,它不会覆盖已经在最后一个位置的内容,它会在后面追加,但是…)哦,伙计,我需要多睡一觉哈哈,对不起。我不认为所有浏览器都支持重写本机函数。@Prajwal,我不这么认为。你能举一个浏览器的例子吗?这段代码将返回一个新的数组,而不是修改它所调用的数组。@binariedM谢谢,但我不能让它工作。控制台在“this=x.concat…”行中显示:“Uncaught ReferenceError:Invalid left-side in assignment”(未捕获引用错误:赋值无效左侧)。您不需要临时的
y
数组,您可以使用一个类似
for(var i=this.length;i>0;i--)this[i]=this[i-1]
的循环将现有元素向右滑动。(只要稍加调整,您就可以将元素滑动一个以上的空间,如果您想在开始处插入多个元素的话。)我认为并非所有浏览器都支持重写本机函数。@Prajwal,我不这么认为。你能举一个浏览器的例子吗?这段代码将返回一个新的数组,而不是修改它所调用的数组。@binariedM谢谢,但我不能让它工作。控制台在“this=x.concat…”行中显示:“Uncaught ReferenceError:Invalid left-side in assignment”(未捕获引用错误:赋值无效左侧)。您不需要临时的
y
数组,您可以使用一个类似
for(var i=this.length;i>0;i--)this[i]=this[i-1]
的循环将现有元素向右滑动。(如果要在开始处插入多个图元,只需稍加调整即可将图元滑动一个以上的空间。)