关于JavaScript的许多有趣的事情之一是函数实际上是对象,它们可以通过多种方式构造,其中一种方法直接使用它的构造函数:
var func = new Function( "arg1" , "arg2" , "arg3" , "function_body" );
考虑到它是一个javascript对象,我假设我可以将一个属性附加到该对象:
func.propertyA = "whatever I want this to be";
考虑到这一点,我将如何引用函数中的属性?
为清晰起见(this doesn't work):
var func = new Function( "arg1" , "arg2" , "arg3" , "alert( func.propertyA );" );
func.propertyA = "hello world";
func();
这应该警告“你好世界。”
在JSFiddle中运行此脚本时,您在控制台中收到错误,而是说"func" is undefined
。
答案 0 :(得分:0)
我真的不建议这样做,但有办法。
当您在function object
上设置值时,可以正确绑定this
。在处理函数时,与方法相反,分配this
的最简单方法是使用<function>.bind
或function.call/function.apply
// Not all JavaScript engines support multiple arguments to new Function
var func1 = new Function( "console.log(this.prop1)" );
func1.prop1 = "Test prop";
func1();
// Bind `this` properly
func2 = func1.bind(func1);
func2();
// Or use apply
func1.apply(func1);
&#13;