gpt4 book ai didi

javascript - 如何在字符串原型(prototype)扩展方法中使用字符串方法

转载 作者:太空宇宙 更新时间:2023-11-04 16:23:54 25 4
gpt4 key购买 nike

我有以下 JavaScript 方法:

String.prototype.includesAny = function(search) {
var found = false;
search.forEach(function(str) {
if(this.toLowerCase().includes(str.toLowerCase())) {
found = true;
}
});
return found;
};

但它抛出错误:

this.toLowerCase is not a function

我认为这是因为 this 此时实际上并不是 String 的实例?有人知道我正在做的事情的正确方法(并且仍然使用原型(prototype)范例)吗?

最佳答案

在 javascript 中,this 是函数作用域,因此创建一个新函数会创建一个新的 this

您的 forEach 调用有一个回调,它是一个函数,在该函数中 this 不再是字符串,而是很可能是窗口

解决方案是简单地存储对外部函数中 this 的引用

String.prototype.includesAny = function(search) {
var found = false,
input = this;
search.forEach(function(str) {
if (input.toLowerCase().includes(str.toLowerCase())) {
found = true;
}
});
return found;
};

Array.forEach 还有一个可选的 thisArg 可以使用

String.prototype.includesAny = function(search) {
var found = false;

search.forEach(function(str) {
if (this.toLowerCase().includes(str.toLowerCase())) {
found = true;
}
}, this);
return found;
};

或者更好的是,使用Array.some

String.prototype.includesAny = function(search) {
return search.some(function(str) {
return this.toLowerCase().includes(str.toLowerCase());
}, this);
};

顺便说一句,扩展原生原型(prototype)通常不是一个好主意。

关于javascript - 如何在字符串原型(prototype)扩展方法中使用字符串方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40387923/

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