如何在Coffeescript中使用Javascript(attr in this)

时间:2011-04-22 03:40:04

标签: coffeescript

在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 个答案:

答案 0 :(得分:16)

您可以使用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!'

own

已编译:https://gist.github.com/62860f0c07d60320151c

它接受循环中的键和值,这非常方便。您可以在for之后插入if object.hasOwnProperty(attr)关键字,以便执行{{1}}检查,该检查应该过滤掉您不想要的原型中的任何内容。

答案 1 :(得分:6)

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...offor own...of存在疑问,使用own通常会更安全。

答案 2 :(得分:2)

您可以使用for x in yfor x of y,具体取决于您希望如何解释元素列表。最新版本的CoffeeScript旨在解决这个问题,你可以通过一个问题了解它的新用法(已经实现并关闭)here on GitHub