Как использовать Javascript для (attr в этом) с Coffeescript - PullRequest
16 голосов
/ 22 апреля 2011

В Javascript «for (attr in this)» часто опасно использовать ... Я согласен.Это одна из причин, почему мне нравится Coffeescript.Тем не менее, я программирую на Coffeescript и имею случай, когда мне нужен Javascript "for (attr in this)".Есть ли хороший способ сделать это в Coffeescript?

Что я сейчас делаю, это пишу набор логики во встроенном необработанном Javascript, например:

...coffeescript here...
for (attr in this) {
  if (stuff here) {
    etc
  }
}

Было бы неплохоиспользовать как можно меньше Javascript ... какие-либо предложения о том, как мне этого добиться и максимально использовать Coffeescript?

Ответы [ 3 ]

16 голосов
/ 22 апреля 2011

Вместо for item in items, который перебирает массивы, вы можете использовать for attr, value of object, который больше похож на for in из JS.

for own attr, value of this
  if attr == 'foo' && value == 'bar'
    console.log 'Found a foobar!'

Скомпилировано: https://gist.github.com/62860f0c07d60320151c

Он принимает и ключ, и значение в цикле, что очень удобно.И вы можете вставить ключевое слово own сразу после for, чтобы обеспечить проверку if object.hasOwnProperty(attr), которая должна отфильтровывать из прототипа все, что вам там не нужно.

6 голосов
/ 22 апреля 2011

Squeegy ответ правильный.Позвольте мне просто изменить его, добавив, что обычное решение о том, что JavaScript for...in является «опасным» (включая свойства прототипа), заключается в добавлении проверки hasOwnProperty.CoffeeScript может сделать это автоматически, используя специальное ключевое слово own:

for own attr of this
  ...

эквивалентно JavaScript

for (attr in this) {
  if (!Object.prototype.hasOwnProperty(this, attr)) continue;
  ...
}

Если вы сомневаетесь, стоит ли использовать for...of или for own...of, как правило, безопаснее использовать own.

2 голосов
/ 22 апреля 2011

Вы можете использовать for x in y или for x of y в зависимости от того, как вы хотите интерпретировать список элементов.Последняя версия CoffeeScript направлена ​​на решение этой проблемы, и вы можете прочитать о ее новом использовании с проблемой (которая была с тех пор реализована и закрыта) здесь, на GitHub

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...