12.12.2014, 22:54
|
|
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
Сообщение от bes
|
если бы querySelectorAll возвращал обычный массив, то можно было бы сделать так
trs.map(function (tr) {
|
// мини j :-)
function $(name, element) {
var el = (element || document).querySelectorAll(name);
return el ? (el.length > 1 ? Array.apply(null, el) : el[0]) : [];
}
|
|
12.12.2014, 23:06
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Сообщение от leshiple
|
bes, если я правильно понял статью, ссылку на которую вы мне дали, то Array.prototype можно заменить на []
|
что делай, то и хочешь
var arr = [1, 2, 3];
var arr1 = ["a", "b", "c"];
var mas = arr1.map.call(arr, function (el) {
return el;
});
alert(mas);
|
|
12.12.2014, 23:49
|
|
Профессор
|
|
Регистрация: 13.03.2013
Сообщений: 1,572
|
|
if (!Array.prototype.map) {
Array.prototype.map = function (fn, scope) {
var tmp = [];
for (var i = 0, len = this.length; i < len; ++i) {
tmp.push(fn.call(scope, this[i], i, this));
}
return tmp;
}
}
var arr = [1, 2, 3];
var arr1 = ["a", "b", "c"];
var mas = arr1.map.call(arr, function (el) {
return el;
});
alert(mas);
var sas = arr.map(function (el) {
return ++el;
});
alert(sas);
|
|
13.12.2014, 09:35
|
Интересующийся
|
|
Регистрация: 09.12.2014
Сообщений: 21
|
|
bes, зачем здесь:
var mas = arr1.map.call(arr, function (el) {
return el;
});
arr1?
Чем он "лучше" чем Array.prototype или []? Он же никак никак не влияет на выполнение функции и к нему внутри функции кроме как по имени не обратишься. Или я ошибаюсь?
Poznakomlus на developer.mozilla.org я прочитал что твоя первая конструкция в посте №23 это полифилл. Как я могу проверить работоспособность твоего кода (в каких случаях метод map будет отсутствовать)? Мне нужен старый браузер или в коде как-то объявить версию языка?
Последний раз редактировалось leshiple, 13.12.2014 в 09:44.
|
|
13.12.2014, 09:51
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Сообщение от leshiple
|
bes, зачем здесь:
var mas = arr1.map.call(arr, function (el) {
return el;
});
arr1?
Он же никак никак не влияет на выполнение функции и к нему внутри функции кроме как по имени не обратишься. Или я ошибаюсь?
|
ты сказал [] вместо Array.prototype, я показал, что любой массив вместо []
Сообщение от leshiple
|
Poznakomlus на developer.mozilla.org я прочитал что твоя первая конструкция в посте №23 это полифилл. Как я могу проверить работоспособность твоего кода (в каких случаях метод map будет отсутствовать)? Мне нужен старый браузер или в коде как-то объявить версию языка?
|
ie8 юзают геронтофилы, поэтому реализация такого полифила полезна только для общего развития
для проверки убери проверку на существование, метод map будет переопределён
|
|
13.12.2014, 10:14
|
Интересующийся
|
|
Регистрация: 09.12.2014
Сообщений: 21
|
|
Я думал что к этому массиву можно обратиться внутри функции через this
|
|
13.12.2014, 10:15
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Сообщение от leshiple
|
Я думал что к этому массиву можно обратиться внутри функции через this
|
call поменял контекст, проверяется простейшими тестами как и всё остальное
|
|
13.12.2014, 10:59
|
Интересующийся
|
|
Регистрация: 09.12.2014
Сообщений: 21
|
|
Чтобы установить свой контекст нужно третьим аргументом у метода call установить необходимый объект.
Я хочу посредством этой конструкции сложить элементы двух массивов без цикла.
|
|
13.12.2014, 11:07
|
|
Профессор
|
|
Регистрация: 22.03.2012
Сообщений: 3,744
|
|
Сообщение от leshiple
|
Чтобы установить свой контекст нужно третьим аргументом у метода call установить необходимый объект.
Я хочу посредством этой конструкции сложить элементы двух массивов без цикла.
|
может у map, а не у call? нет, третий аргумент - это просто доступ к самому массиву, элементы из которого берутся
навскиду можно так
var arr1 = [1, 2, 3];
var arr2 = ["a", "b", "c"];
var result = arr1.map(function (val, index) {
return val + arr2[index];
});
alert(result);
|
|
13.12.2014, 11:19
|
Интересующийся
|
|
Регистрация: 09.12.2014
Сообщений: 21
|
|
bes,
Да, у map. Проглядел. Спасибо.
|
|
|
|