【问题标题】:Getting the name of a coffeescript class?获取咖啡脚本类的名称?
【发布时间】:2012-06-03 04:57:00
【问题描述】:

是否会在所有浏览器中显示以下警报“Foo”,即使在缩小时也是如此?

class Foo

alert(Foo.name)

文档中没有说明任何内容,我知道 IE 的函数名称存在问题,我对有关此问题的许多问题感到困惑,例如 any of these issues !

【问题讨论】:

  • WRT 缩小代码 - 它实际上取决于缩小器和您传递给它的配置。大多数可以配置为不触及命名函数语句(如 UglifyJS 的--no-mangle-functions),因此name 属性应该在那里正常工作(除非浏览器根本不支持它)。当然,使用 CoffeeScript 自 1.3.3 以来手动定义的属性,无论缩小如何,它都应该始终有效(因为它作为纯字符串文字属性添加)

标签: coffeescript introspection


【解决方案1】:

Foo.prototype 中包含的Foo 类的任何方法中,您可以插入该行

console.log @constructor.name

它会写

Foo

到您的控制台日志。 HTH。

【讨论】:

【解决方案2】:

这可能取决于您使用的 CoffeeScript 编译器版本。在最新的稳定版本(1.3.3)中,默认情况下不会生成“name”属性。

class Foo

编译成

var Foo;
Foo = (function() {
  function Foo() {}
  return Foo;
})();

由于name 属性是非标准的并且IE 目前不支持,因此您不能真正依赖它跨浏览器。有关这方面的详细信息,请访问 MDN:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/Name

【讨论】:

  • 您是否暗示更高版本或更旧版本会生成名称属性?还有一些标志会覆盖这个默认值还是你必须自己添加属性。
  • 我认为它实际上已被删除,所以在旧版本中您可能仍然会发现这种行为,是的。
猜你喜欢
  • 2013-01-09
  • 1970-01-01
  • 2012-10-10
  • 2012-12-31
  • 1970-01-01
  • 2012-08-26
  • 2011-09-15
  • 1970-01-01
相关资源
最近更新 更多