Javascript 是否可以使用CoffeeScript迭代类的静态变量和方法?
使用CoffeeScript,我希望能够迭代类的静态方法和变量。更具体地说,我想访问Javascript 是否可以使用CoffeeScript迭代类的静态变量和方法?,javascript,coffeescript,Javascript,Coffeescript,使用CoffeeScript,我希望能够迭代类的静态方法和变量。更具体地说,我想访问Math中的所有函数 我正在寻找类似以下功能: for x in Math console.log (x + ": " + Math[x]) 这可能吗?是的,但您需要做的是迭代对象的原型。在CoffeeScript中,它将如下所示: for key, value of MyClass.prototype console.log key, ':', value 编辑: 在JavaScript中是这样
Math
中的所有函数
我正在寻找类似以下功能:
for x in Math
console.log (x + ": " + Math[x])
这可能吗?是的,但您需要做的是迭代对象的原型。在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
是一个糟糕的例子。如果您使用的是自定义类构造函数,它将正常工作。来自上一个stackoverflow
问题:
你们没有检查,是吗?对不起,伙计们。你说得对。它不起作用,因为Math是本机构造函数。这仅适用于自定义构造函数。看我的编辑。那么,这根本不可能吗?对不起@jeremynealbrown,我不这么认为。我认为原因是这些函数不是正常函数,如果你试图在其他环境中应用它们,它们就不起作用。例如,此行:
console.log(Array.prototype.map)
生成以下结果:function map(){[native code]}
。该[本机代码]部分意味着该函数不是用JavaScript实现的,因此它很特殊,显然他们不希望您能够用它做其他事情。
Object.getOwnPropertyNames( Math )