我正在尝试扩展 Array 原型(prototype):
Array.prototype.rotate = function() {
var arr = [];
for (var i = 0; i < this[0].length; ++i) {
arr[i] = [];
for (var j = 0; j < this.length; ++j) {
arr[i].push(this[j][i])
}
}
this = arr;
return arr;
}
完全花花公子,直到 this = arr
。爆炸了。
如何重新分配原型(prototype)函数的 this
属性?我要他妈的处理之前的数组配置。
编辑
我为什么要这样做?我希望它表现得像其他数组函数。例如,这有效:
myArray.pop();
我不需要这样做:
myArray = myArray.pop();
另一个编辑
我这样做是为了解决它,但它看起来很愚蠢:
Array.prototype.rotate = function()
{
var arr = [];
var len = this[0].length;
for (var i = 0; i < len; ++i) {
arr[i] = [];
for (var j = 0; j < this.length; ++j) {
arr[i].push(this[j][i])
}
}
for (var i = 0; i < this.length; ++i) {
delete this[i];
}
for (var i = 0; i < arr.length; ++i) {
this[i] = arr[i];
}
return arr;
}
这会起作用,但是,在一个例子中,当旋转这个数组时:
[[1, 1], [2, 2], [3, 3]]
我会得到:
[[1, 2, 3], [1, 2, 3], ]
看到那个空白的第三项了吗?是的 - 这给我带来了麻烦。
最佳答案
虽然您不能覆盖this
,但您绝对可以将工作数组的值设置为您在函数中构建的数组。像这样:
Array.prototype.rotate = function() {
var arr = [];
for (var i = 0; i < this[0].length; ++i) {
arr[i] = [];
for (var j = 0; j < this.length; ++j) {
arr[i].push(this[j][i])
}
}
this.length = 0; //empty the array
this.push.apply(this, arr); //push all of the elements from arr onto this
return arr;
}
关于javascript - JS - 在函数中覆盖 'this',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23506221/