使用ES2015,我想扩展Function
类并将其实例用作可调用函数。
class Foo extends Function {
// how to wite behavior?
}
let foo = new Foo();
foo();
foo.call();
// this is callable, but no behavior defined
如何让foo
在其声明中具有特定的行为?
答案 0 :(得分:2)
原始函数构造函数将字符串作为参数,因此如果您没有覆盖构造函数,以下内容应该适用于您:
const foo = new Foo("console.log(42)");
foo(); // outputs 42.
答案 1 :(得分:2)
Function
构造函数accepts arguments:
new Function ([arg1[, arg2[, ...argN]],] functionBody)
在这种情况下,您可以使用适当的参数调用super
:
// SNIPPET ONLY WORKS ON ES2015-ENABLED BROWSERS
"use strict";
class Foo extends Function {
constructor() {
super("a", "snippet.log(a);")
}
}
let foo = new Foo();
foo("one");
foo.call(null, "two");

<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="//tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
&#13;
现在,在字符串文字中编写JavaScript代码很痛苦,函数文本中的代码在全局范围内进行评估,因此我们无法在构造函数中定义实际函数,从函数文本中调用它。所以这个用途有限。但...