JavaScript:如何将`.bind()``Function`绑定到另一个对象 事实
JavaScript:如何将`.bind()``Function`绑定到另一个对象 事实,javascript,scope,this,v8,Javascript,Scope,This,V8,函数('returnthis')()始终返回全局(窗口)对象Function.bind({})('returnthis')()也返回全局对象 我的目标 我想创建函数的变体。通过调用Function的变体返回的匿名函数应始终使用myObj作为this 如果JavaScript不会以这种特殊方式运行(请参阅事实),我将执行以下操作: var myFun = Function.bind(myObj); console.assert(myObj === myFun('return this')());
函数('returnthis')()
始终返回全局(窗口)对象Function.bind({})('returnthis')()
也返回全局对象
我的目标
我想创建函数的变体
。通过调用Function
的变体返回的匿名函数应始终使用myObj
作为this
如果JavaScript不会以这种特殊方式运行(请参阅事实),我将执行以下操作:
var myFun = Function.bind(myObj);
console.assert(myObj === myFun('return this')());
myFun
是我想要拥有的对象。现在我可以做以下工作:
var myFun = Function.bind(myObj);
console.assert(myObj === myFun('return this')());
我的问题
- 为什么
返回函数
,即使在全局
将其绑定到另一个对象之后.bind()
- 有解决办法吗?如何将
绑定到另一个对象函数
谢谢。我不知道您到底想实现什么,但您的方法链接顺序似乎不正确
Function('return this').bind({})() // returns the empty Object
你基本上是这样做的:
Function.call({}, 'return this;')();
函数
函数在新匿名对象的上下文中执行。这样做不会影响函数生成的函数的上下文。事实证明,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);
}
}());
现在可以调用函数('returnthis',myObj)()
并返回myObj
或者,只需创建通过assert
测试的建议myFun(text)
语法:
var myFun = function(ftext) {
return Function(ftext).bind(myObj);
}
谢谢,在这个用例中我很好但是我想创建一个函数
本身的变体,而不是由函数
创建的函数的变体。我想要像var myFun=Function.bind(myObj)
这样的东西作为变量的结果。如果我使用的是你的解决方案,我不能做这样的事情-那么我需要将.bind()
函数所产生的每一个都分开。嗯,要么我对JavaScript了解不够,要么我不理解你想法背后的基本原理。但在我看来,您似乎想要重载.bind
的原型。如果我帮不上忙的话,我很抱歉。我延长了我的问题,以便弄清楚我的意思。我希望现在一切正常。”我觉得你想重载.bind的原型:
”:这并不是我想的我不想对.bind()
做任何事情,bind()
只是我创建函数的第二个版本的工具。我希望第二个版本的函数(var myFun=Function.bind(myObj);
)在被调用时返回特殊的匿名函数(var myRetValue=myFun('returnthis')
)。关于这些匿名函数的特殊之处应该是:在这些返回函数的范围内,this
应该引用myObj
(console.assert(myObj===myRetValue());
)。因此,这一切都是关于更改Function()
调用返回的匿名函数的上下文我想表达的意思清楚吗?我希望如此。如果不是,请告诉我怎么了。