在javascript中编辑原型方法.push()
我从未使用过原型,也许我甚至不知道它是如何工作的,所以我来了 我正在尝试更改.push()在javascript中的工作方式:它将参数添加为最后一个元素,但我希望它将参数添加到第一个位置 以下是我的非工作猜测:在javascript中编辑原型方法.push(),javascript,methods,parameters,prototype,Javascript,Methods,Parameters,Prototype,我从未使用过原型,也许我甚至不知道它是如何工作的,所以我来了 我正在尝试更改.push()在javascript中的工作方式:它将参数添加为最后一个元素,但我希望它将参数添加到第一个位置 以下是我的非工作猜测: Array.prototype.push() = function(e){ var x = [e]; return x.concat(this); } 为我可能犯的惊人错误感到抱歉:) 免责声明:我只是想了解如何修改本机方法。为什么每个人都这么
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]
的循环将现有元素向右滑动。(如果要在开始处插入多个图元,只需稍加调整即可将图元滑动一个以上的空间。)