Javascript 使用原型时如何引用父对象?
我已经创建了一个实用函数,它包含在我编写的几乎所有Javascript代码中。该函数的目的是简单地从数组中删除一个元素。它接受一个数组和一个索引作为参数,并返回已删除所需元素的数组 下面是函数:Javascript 使用原型时如何引用父对象?,javascript,arrays,oop,function,prototype,Javascript,Arrays,Oop,Function,Prototype,我已经创建了一个实用函数,它包含在我编写的几乎所有Javascript代码中。该函数的目的是简单地从数组中删除一个元素。它接受一个数组和一个索引作为参数,并返回已删除所需元素的数组 下面是函数: sliceHere = function(array, i) { buffOne = array.slice(0, i); buffTwo = array.slice(i + 1); return buffOne.concat(buffTwo); } 它很好
sliceHere = function(array, i)
{
buffOne = array.slice(0, i);
buffTwo = array.slice(i + 1);
return buffOne.concat(buffTwo);
}
它很好用。如果我有一个数组a=[“a”,“b”,“c”]
,并且我想从中删除“a”
,我只需执行a=sliceHere(a,0)代码>
虽然这个确实有效,但我想用更“优雅”的东西来代替它。我想做的是使函数sliceHere
成为所有数组的一种方法。因此,我可以简单地执行a.sliceHere(0)
并实现相同的效果。这是一种更好的做事方式,如果我错了,请纠正我
我所做的是:
sliceHere = function(i)
{
buffOne = this.slice(0, i);
buffTwo = this.slice(i + 1);
this = buffOne.concat(buffTwo);
}
Array.prototype.sliceHere = sliceHere
这看起来根本不管用。因为我知道“this”可能不是实际的数组如何从方法内部引用数组?此
始终为只读,因此您无法为其分配新数组,您应该返回一个更新的值。以下是您的示例的更新版本:
sliceHere = function(i)
{
buffOne = this.slice(0, i);
buffTwo = this.slice(i + 1);
return buffOne.concat(buffTwo);
}
Array.prototype.sliceHere = sliceHere;
var arr = [1, 2, 3];
arr = arr.sliceHere(1);
此
始终为只读,因此无法为其分配新数组,应返回更新后的值。以下是您的示例的更新版本:
sliceHere = function(i)
{
buffOne = this.slice(0, i);
buffTwo = this.slice(i + 1);
return buffOne.concat(buffTwo);
}
Array.prototype.sliceHere = sliceHere;
var arr = [1, 2, 3];
arr = arr.sliceHere(1);
你为什么要重新发明轮子?已经做了同样的事情:
var array = [1, 2, 3];
var i = 1;
array.splice(i, 1);
array; // [2, 3]
好吧,让我们重新发明轮子:
带接头:
Array.prototype.sliceHere = function(i) {
this.splice(i, 1);
};
无拼接:
Array.prototype.sliceHere = function(i) {
var i_want_you = this.slice(0, i).concat(this.slice(i + 1));
this.length = 0;
this.push.apply(this, i_want_you); // <-- Modifies all keys, indirectly
};
Array.prototype.sliceHere=函数(i){
var i_want_you=this.slice(0,i).concat(this.slice(i+1));
这个长度=0;
这个.push.apply(这个,我想要你);//你为什么要重新发明轮子?已经做了同样的事情:
var array = [1, 2, 3];
var i = 1;
array.splice(i, 1);
array; // [2, 3]
好吧,让我们重新发明轮子:
带接头:
Array.prototype.sliceHere = function(i) {
this.splice(i, 1);
};
无拼接:
Array.prototype.sliceHere = function(i) {
var i_want_you = this.slice(0, i).concat(this.slice(i + 1));
this.length = 0;
this.push.apply(this, i_want_you); // <-- Modifies all keys, indirectly
};
Array.prototype.sliceHere=函数(i){
var i_want_you=this.slice(0,i).concat(this.slice(i+1));
这个长度=0;
这个。推。应用(这个,我想要你)斯蒂德,他毕竟回答了我的问题。@Bane这是你第一次拷贝代码片段,这才是真正的答案?:'(
@Bane更新了我的答案。不过这是一个方轮。我不认为重新发明轮子总是消极的。学生们必须一直这样学习。我是一个学生,如果我没有尝试重新发明轮子,我就不会知道这一点。另外,到底推动了什么。应用
做了什么?当然,但这对以后的阅读可能还是很好的我想,我会接受谢尔盖的回答,他毕竟回答了我的问题。@Bane这是你第一个被复制的代码片段,这才是真正的答案?:'(
@Bane更新了我的答案。不过这是一个方轮。我不认为重新发明轮子总是消极的。学生们必须一直这样做才能学习。我是一个学生,如果我没有重新发明轮子,我就不会知道这一点。还有,到底推动了什么。应用
做了什么?因此,实际上没有办法编写into对象?如果是这样,splice
是如何工作的,那么?splice
修改现有实例,不会替换对象。您可以调用对象方法,更改其属性值,但不能,您不能使其指向另一个对象。您可以:while(i
(请注意,在本例中我有意避免使用拼接
,因为这会使整个练习变得毫无意义)因此,无法以某种方式实际写入对象?如果是这样,splice
是如何工作的,那么?splice
修改现有实例,不会替换对象。您可以调用对象方法,更改其属性值,但不可以,您不能让它指向另一个对象。您可以:while(i
(注意,在本例中我故意避免使用拼接
,因为这会使整个练习变得毫无意义)