Вопрос по функции 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 преобразуется в массив с одним элементом? |
Строка не преобразуется в массив, над ней просто выполняются те же операции, что и с массивом. 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, к символам можно обращаться через оператор []. |
Kolyaj, Теперь всё понятно, спасибо!
|
Цитата:
кроме пресловутого МСИЕ. |
Цитата:
|
Kolyaj,
Конечно, нет. Но map можно эмулировать, а вот строка[] - нет. |
Часовой пояс GMT +3, время: 06:25. |