#javascript
Вопрос:
Мне нужна функция, которая принимает строку в качестве параметра и преобразует ее в нижний регистр в JS.
Я мог бы добиться этого, написав обертку сверху toLowerCase
вот так
makeLowerCase(stringText){
return stringText.toLowerCase();
}
Но мне было интересно, есть ли способ получить ссылку toLowerCase
на сам метод, как показано ниже, чтобы я мог избежать написания оболочки.
toLowerFn = String.prototype.toLowerCase
toLowerFn('AAA') // throws error - Uncaught TypeError: String.prototype.toLowerCase called on null or undefined
Я знаю, что в python мы можем получить ссылку на функцию lower (), используя str.lower
и передавая ее в любое место.
Есть идеи, можно ли сделать то же самое в JS?
Комментарии:
1. Зачем вам нужно это делать вместо вызова
variable.toLowerCase()
или функции, которая это делает ? В этом вообще нет никакого смысла… вы не используете Javascript подобным образом… это не python… Вы добавляете сложности…2. @matiaslauriti возможно, что OP захочет передать это где-нибудь в качестве ссылки на функцию, например,
arr.map(toLower)
что было бы правильным использованием в JS. К сожалению,toLowerCase
это метод, который делает его довольно раздражающим для передачи в качестве ссылки.3. Ну, я никогда этого не видел, это кажется сложным без всякой причины, просто звоните
variable.toLowerCase()
, не нужно делать сложные вещи, потому что они взяты из других языков…4. @matiaslauriti в данном случае это JS, который сложнее, чем это должно быть. Существуют предложения, направленные на решение проблем, связанных с привязкой методов. Прямо сейчас, к сожалению, у нас ничего нет. И это прискорбно, так как передача ссылок на функции лежит в основе JS —
str.split("").map(Number)
например, илиarr.filter(Boolean)
является идиоматическим кодом JS. Как и должно бытьtotal = shoppingBasketArr.map(getPrice).map(addShipping).reduce(sum)
. Тем не менее, мы не можем легко сделать это со ссылками на методы.
Ответ №1:
Вы можете это сделать, если вы Function#bind
Function#call
используете в String#toLowerCase
качестве this
контекста:
const str = "HELLO";
const toLower = Function.prototype.call.bind(String.prototype.toLowerCase);
console.log(toLower(str));
Но я бы не рекомендовал это делать, так как это выглядит странно и сбивает с толку. Я бы просто написал обертку:
const str = "HELLO";
const toLower = s => s.toLowerCase();
console.log(toLower(str));
Ответ №2:
const foo = 'FOO';
console.log(foo.toLowerCase());
Комментарии:
1.Как это соотносится
toLowerCase
?