Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 25.08.2010, 13:47
Аспирант
Отправить личное сообщение для Ozerich Посмотреть профиль Найти все сообщения от Ozerich
 
Регистрация: 03.08.2009
Сообщений: 33

Вопрос по функции call()
Вот пример использования функции call()
var a = Array.prototype.map.call("Hello World", 
                                 function(x) { return x.charCodeAt(0); })


Почему в итоге получается массив [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100]?

Я так понимаю что строка преобразуется в массив, а потом над каждым элементом выполняется функция. Но почему когда написать
var sa = new Array("Hello world");
var f = function(x){return x.charCodeAt(0);}
res = sa.map(f);


sa преобразуется в массив с одним элементом?
Ответить с цитированием
  #2 (permalink)  
Старый 25.08.2010, 14:03
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Строка не преобразуется в массив, над ней просто выполняются те же операции, что и с массивом. map, например, имеет вид
function(fn, thisObj) {
    var result = [];
    for (var i = 0, l = this.length; i < l; i++) {
        if (i in this) {
            result[i] = fn.call(thisObj, this[i], i, this);
        }
    }
    return result;
};

У строк есть свойство length, к символам можно обращаться через оператор [].
Ответить с цитированием
  #3 (permalink)  
Старый 25.08.2010, 14:33
Аспирант
Отправить личное сообщение для Ozerich Посмотреть профиль Найти все сообщения от Ozerich
 
Регистрация: 03.08.2009
Сообщений: 33

Kolyaj, Теперь всё понятно, спасибо!
Ответить с цитированием
  #4 (permalink)  
Старый 25.08.2010, 18:06
Профессор
Отправить личное сообщение для with-love-from-siberia Посмотреть профиль Найти все сообщения от with-love-from-siberia
 
Регистрация: 14.12.2009
Сообщений: 155

Сообщение от Kolyaj
к символам можно обращаться через оператор []
Уточнение:
кроме пресловутого МСИЕ.
Ответить с цитированием
  #5 (permalink)  
Старый 25.08.2010, 19:09
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от with-love-from-siberia
кроме пресловутого МСИЕ.
Ну там и map нет Но важное замечание.
Ответить с цитированием
  #6 (permalink)  
Старый 26.08.2010, 09:38
Профессор
Отправить личное сообщение для with-love-from-siberia Посмотреть профиль Найти все сообщения от with-love-from-siberia
 
Регистрация: 14.12.2009
Сообщений: 155

Kolyaj,
Конечно, нет. Но map можно эмулировать, а вот строка[] - нет.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переменная как значение функции. Jurasmi Общие вопросы Javascript 7 22.04.2010 12:45
вопрос по функции replace() bushstas Общие вопросы Javascript 3 20.02.2010 16:57
Вопрос по функции display block p_project Элементы интерфейса 4 05.12.2009 23:15
Подскажите, как работает простой код (замыкание функции)? Dotod Общие вопросы Javascript 5 02.12.2009 04:03
Вопрос по функции Flex Общие вопросы Javascript 3 05.12.2008 04:03