javascript - 使用原型(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);         
}

它工作得很好。如果我有一个数组 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

这似乎根本行不通。因为我知道“这个”可能不是真正的数组。 如何从方法内部引用数组?

最佳答案

为什么要重新发明轮子? Array.prototype.splice已经做了同样的事情:

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
};

如果您不希望该方法出现在 for(.. in ..) 循环中,请使用 Object.defineProperty(Array.prototype, 'sliceHere', {value: /*function here*/}); .

关于javascript - 使用原型(prototype)时如何引用父对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11058089/

相关文章:

javascript - 欧盟境内的 SMS 是否被视为国际短信?

javascript - rangy - 如何使用 iframe 中的内容

oop - 策略设计模式的确切定义是什么?

c++ - 为什么我们将对象而不是对象成员传递给函数?

javascript - 在Windows 8 (Js/html) APP中显示特定数量的项目

带参数的 Javascript onClick 函数

Java:将txt文件放入第二个数组中

Python:在数组列中查找特定值

arrays - 在 VBA 中使用数组进行调试

language-agnostic - 与语言无关的基本编程问题