Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вопрос по функции call() (https://javascript.ru/forum/misc/11472-vopros-po-funkcii-call.html)

Ozerich 25.08.2010 13:47

Вопрос по функции 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 преобразуется в массив с одним элементом?

Kolyaj 25.08.2010 14:03

Строка не преобразуется в массив, над ней просто выполняются те же операции, что и с массивом. 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, к символам можно обращаться через оператор [].

Ozerich 25.08.2010 14:33

Kolyaj, Теперь всё понятно, спасибо!

with-love-from-siberia 25.08.2010 18:06

Цитата:

Сообщение от Kolyaj
к символам можно обращаться через оператор []

Уточнение:
кроме пресловутого МСИЕ.

Kolyaj 25.08.2010 19:09

Цитата:

Сообщение от with-love-from-siberia
кроме пресловутого МСИЕ.

Ну там и map нет :) Но важное замечание.

with-love-from-siberia 26.08.2010 09:38

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


Часовой пояс GMT +3, время: 11:58.