Function('return this')()
始终返回全局(窗口)对象。 Function.bind({})('return this')()
也返回全局对象。
我想创建Function
的变体。通过调用Function
的变体返回的匿名函数应始终使用myObj
作为this
。
如果JavaScript不会以这种特殊方式运行(请参阅事实),我会执行以下操作:
var myFun = Function.bind(myObj);
myFun
是我想拥有的对象。现在我可以做到以下几点:
console.assert(myObj === myFun('return this')());
Function
返回global
,即使.bind()
将其转移到另一个对象后呢?Function
绑定到另一个对象?感谢。
答案 0 :(得分:1)
你基本上是这样做的:
Function.call({}, 'return this;')();
Function
函数在新的匿名对象的上下文中执行。执行此操作不会影响 Function
生成的函数的上下文。事实证明Function
并不关心它运行的上下文 - 它总是生成具有默认全局上下文的函数。
如果要指定Function
生成的函数的上下文,您希望像这样包装Function
:
// give our vars privacy in a closure
(function() {
// store old Function
var oldFunc = Function;
// redefine Function to be a wrapper around the real Function
// which takes an additional `context` argument
Function = function(ftext, context) {
return oldFunc(ftext).bind(context);
}
}());
现在,您可以致电Function('return this', myObj)();
,它将返回myObj
。
或者,只需创建通过myFun(text)
测试的建议assert
语法:
var myFun = function(ftext) {
return Function(ftext).bind(myObj);
}
答案 1 :(得分:0)
我不知道你究竟想要实现什么,但似乎你的方法链接顺序错误。
Function('return this').bind({})() // returns the empty Object