Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.11.2013, 14:40
Новичок на форуме
Отправить личное сообщение для Manyahin Посмотреть профиль Найти все сообщения от Manyahin
 
Регистрация: 14.06.2013
Сообщений: 9

Array.prototype.each
['test',false,12].each( function() {
  alert(this);
})


Задание, написать функцию each.
Начинаю писать,

Array.prototype.each = function(fn) {
  for(var el in this) {
    fn(this[el]);
  }
}


Выводит 4 раза [Object Window]. Подскажите, в чем проблема?
Ответить с цитированием
  #2 (permalink)  
Старый 20.11.2013, 14:47
Новичок на форуме
Отправить личное сообщение для Manyahin Посмотреть профиль Найти все сообщения от Manyahin
 
Регистрация: 14.06.2013
Сообщений: 9

Ок, забыл вызвать call.
Array.prototype.each = function(fn) {
  for(var el in this) {
    fn.call(this[el]);
  }
}


А как быть с тем, что четвертым елементом он выкидывает функцию each?
Ответить с цитированием
  #3 (permalink)  
Старый 20.11.2013, 14:52
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

Manyahin,

Array.prototype.each = function(fn) {
  for(var i in this) {
   this[i] = fn(this[i]);
  }
  return this
}

alert([1,2,3].each(function (a)
{
   return a*a
}));
Ответить с цитированием
  #4 (permalink)  
Старый 20.11.2013, 14:55
Новичок на форуме
Отправить личное сообщение для Manyahin Посмотреть профиль Найти все сообщения от Manyahin
 
Регистрация: 14.06.2013
Сообщений: 9

Ок, это норм?
Array.prototype.each = function(fn) {
  for(var el in this) {
    if(Array.prototype.each != this[el])
      fn.call(this[el]);
  }
}
Ответить с цитированием
  #5 (permalink)  
Старый 20.11.2013, 15:14
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,075

Manyahin,

Array.prototype.each = function(fn) {
    for (var i=0; i<this.length; i++)  {this[i] = fn.call(this, this[i], i);}
    return this
}

alert([1,2,3].each(function (a)
{
   return a*a
}));

['test',false,12].each( function(el, i) {
  alert([el,i]);
  return el
})
Ответить с цитированием
Ответ



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

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