Нужно пояснение по поводу Array.prototype.map и map.call( ), как это работает?

#javascript #array-map

Вопрос:

 let Map = Array.prototype.map
let strResult = Map.call("Muhammad asif", (x) => {
    return x.charCodeAt(0);
})
console.log(strResult)
 

Какова связь между вызовом и картой и каков ее процесс? почему здесь используется charCodeAt(0)?

Комментарии:

1. Вы читали Function.prototype.call

2. Да, я знаю об этом методе @jabaa, но я не могу понять map.call, и что такое charCodeAt

3. Ты знаешь об Function.prototype.call этом, но не можешь понять Map.call ? В этом нет никакого смысла. Это одно и то же. Map это функция. Map.call это функция Function.prototype.call , которая определена в прототипе всех функций. Вы можете прочитать о charCodeAt

4. Вы можете выполнить поиск mdn «поисковый запрос» в вашей любимой поисковой системе для всех вопросов о JavaScript, например mdn charCodeAt , mdn call , mdn map . Некоторые браузеры даже поддерживают добавление MDN в качестве внутренней поисковой системы.

Ответ №1:

  1. Какова связь между call и map ?
  • Как сказал @jabaa в разделе комментариев, map это функция. call тоже функция.
  • map является частью Array объекта и call является частью Function объекта.
  • Это значит,
    • вы должны использовать map в массиве. Например: [1, 2, 3].map() ,
    • и использовать call на функции. Например: myFunction.call()

  1. Как проходит его процесс?

Array.prototype.map это функция, которую вы помещаете в вызываемую переменную Map . Вы не можете просто использовать его как обычную функцию, потому что он предназначен для использования с массивом. Вы можете использовать его вот так:

 const myArray = [1, 2, 3]
myArray.Map = Map // put your `Map` variable into a real array
myArray.Map(number => console.log(number))
 

или

 Map.call("your array or iterable things goes here", (itemInArray) => {console.log(itemInArray)});
/* first parameter of `call` will be used as `this`. `this` in `Array.prototype.map` means an array. CMIIW */
 

Что то же самое, что:

 const myString = "your array or iterable things goes here"
for(let index = 0; index < myString.length; index  ){
  const itemInArray = myString[index]
  console.log(itemInArray)
}
 

  1. Почему charCodeAt(0) используется здесь?

Я не знаю. Это ваш код, и тот, кто должен ответить на этот вопрос, — это вы сами. charCodeAt не является обязательной функцией для map или call для работы. К вашему сведению, charCodeAt это также функция, которая возвращает целое число от 0 до 65535, представляющее единицу кода UTF-16 с заданным индексом. Так,

 "abc".charCodeAt(0) // will show UTF-16 representation of the 0th character of "abc"
"abc".charCodeAt(1) // will show UTF-16 representation of the 1st character of "abc"
"abc".charCodeAt(2) // will show UTF-16 representation of the 2nd character of "abc"
 

Ответ №2:

Здесь вы можете найти некоторое объяснение https://forum.freecodecamp.org/t/explain-array-prototype-map-call/165936/7

При таком подходе вы можете использовать map функцию для строки, как это было в массиве.

charCodeAt является функцией, вызываемой для каждого элемента данной строки. Он возвращает представление в Юникоде (число) переданного символа. Вы можете передать любую другую функцию, принимающую строки, вместо нее.

Например:

 let Map = Array.prototype.map
let strResult = Map.call("Muhammad asif", (x) => {
    return x   x
});
console.log(strResult)
 

приведет к
[«ММ», «уу», «чч», «аа», «мм», «мм», «аа», «дд», » «, «аа», «сс», «ii», «ff»]