gpt4 book ai didi

javascript - JS - 在函数中覆盖 'this'

转载 作者:数据小太阳 更新时间:2023-10-29 05:57:57 24 4
gpt4 key购买 nike

我正在尝试扩展 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com