Реализация каждого в vanila JS похожа на jQuery - PullRequest
1 голос
/ 30 января 2012

Я реализовал each такую ​​функцию в JS:

Object.prototype.each = function(fn){
  for (var x in this){
    if (this.hasOwnProperty(x)){
        fn(x);
    }
  }
  return this;
};


var o = {'a' : 'apple', 'b' : 'bat', 'c' : 'cat'};
o.each(function(i){
   alert(i);
});

Хотя это работает нормально. Что-то не так в этом? Спрашиваю, потому что я изучаю JS.

Также, почему выдает ошибку, если я делаю:

{'a' : 'apple', 'b' : 'bat', 'c' : 'cat'}.each(function(i){
   alert(i);
});

Ответы [ 2 ]

3 голосов
/ 30 января 2012

Вам необходимо заключить скобки вокруг объекта, иначе он будет интерпретироваться как блок из-за открывающихся и закрывающихся фигурных скобок.

({'a' : 'apple', 'b' : 'bat', 'c' : 'cat'}).each(function(i){
   alert(i);
});

Когда вы делаете это без скобок, интерпретатор "увидит" это:

{ // open block statement
   'a' : 'apple', 'b' : 'bat', 'c' : 'cat' // not a valid expression!
}.each(function(i){ // there's no dot property access notation for statements!
   alert(i);
});

Это блок с одним выражением. Однако, поскольку это недопустимое выражение, оно вернет синтаксическую ошибку. Даже если бы это было допустимое выражение, оно все равно выдало бы ошибку, поскольку у блоков нет свойств, и, следовательно, нотация доступа к свойствам точки не применима:

{ console.log("hello world"); }.each(function(){})

Таким образом, вы должны сообщить интерпретатору, что объект является выражением, заключив его в скобки, чтобы устранить неоднозначность (поскольку вы не можете поместить оператор в скобки - только выражения).

1 голос
/ 30 января 2012

Ваша реализация выглядит хорошо.

{'a' : 'apple', 'b' : 'bat', 'c' : 'cat'}.each... выдает ошибку, поскольку она синтаксически некорректна. Вложите внутри () это будет работать.

Попробуйте это.

({'a' : 'apple', 'b' : 'bat', 'c' : 'cat'}).each(function(i){
   alert(i);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...