【问题标题】:Is it possible to iterate over the static variables and methods of a class with CoffeeScript?是否可以使用 CoffeeScript 遍历类的静态变量和方法?
【发布时间】:2013-10-10 12:25:27
【问题描述】:

使用 CoffeeScript,我希望能够迭代类的静态方法和变量。更具体地说,我想访问Math 中的所有功能。

我正在寻找类似的功能:

for x in Math
    console.log (x + ": " + Math[x])

这可能吗?

【问题讨论】:

    标签: javascript coffeescript


    【解决方案1】:

    来自之前的stackoverflow 问题:How can I list all the properties of Math object?

    Object.getOwnPropertyNames( Math )
    

    【讨论】:

      【解决方案2】:

      是的,但您需要做的是遍历对象的原型。在 CoffeeScript 中它看起来像这样:

      for key, value of MyClass.prototype
        console.log key, ':', value
      

      编辑:

      在 JavaScript 中是这样的:

      var i;
      for (i in MyClass.prototype) {
        // This condition makes sure you only test real members of the object.
        if (Object.prototype.hasOwnProperty.call(MyClass.prototype, i)) {
          console.log(i, ':', MyClass.prototype[i]);
        }
      }
      

      编辑 2:

      一个警告:这不适用于 原生 JavaScript 构造函数,所以Math 是一个不好的例子。如果您使用自定义类构造函数,它会正常工作。

      【讨论】:

      • 你没检查吧?
      • 对不起,伙计们。你说得对。它不起作用,因为 Math 是本机构造函数。这仅适用于自定义构造函数。查看我的编辑。
      • 那么,这根本不可能吗?
      • 对不起@jeremyne​​albrown 我不这么认为。而且我认为原因是这些功能不是正常功能,如果您尝试将它们应用于其他上下文,则无法正常工作。例如,这一行:console.log(Array.prototype.map) 产生以下结果:function map() { [native code] }。该 [native code] 部分意味着该函数未在 JavaScript 中实现,因此它很特殊,显然他们不希望您能够用它做其他事情。
      猜你喜欢
      • 2021-11-24
      • 2015-05-16
      • 2023-01-27
      • 2012-02-23
      • 1970-01-01
      • 1970-01-01
      • 2016-06-26
      • 1970-01-01
      • 2017-03-19
      相关资源
      最近更新 更多