JavaScript:如何将“.bind()”“函数”到另一个对象
JavaScript: How To `.bind()` `Function` to Another Object
事实
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
绑定到另一个对象?
谢谢。
你本质上是在这样做:
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
。
或者,只需创建通过assert
测试的建议myFun(text)
语法:
var myFun = function(ftext) {
return Function(ftext).bind(myObj);
}
我不知道你到底想实现什么,但似乎你的方法链接顺序错误。
Function('return this').bind({})() // returns the empty Object
相关文章:
- 为什么要包装每一个原型“;类“;JS中具有匿名函数的对象
- javascript函数,它接受两个输入:一个对象和一个键,并返回对象中该键的相应值
- 从javascript函数返回一个对象
- 节点模块对象范围:在所有函数之间共享一个对象
- 如何将对象引用传递到 mootools 中另一个对象的构造函数中
- JavaScript:如何将“.bind()”“函数”到另一个对象
- 如何使用ES6将两个具有函数的对象合并为一个新对象
- 如何使用jQuery访问属于函数内部另一个函数的对象的属性
- 使用jQuery.ajax请求向PHP函数发送一个对象数组
- 如何将来自多个 JavaScript 类的函数组合到一个对象中
- 有没有一个lodash函数可以合并两个对象并删除其中一个对象的属性(如果它们没有)'不存在于另一个中
- 函数中的JavaScript函数-返回一个对象
- JS 函数将对象作为输入,并返回一个对象,该对象对作为参数传递的对象执行操作
- 是JavaScript中的函数一个对象
- 如何创建一个对象,其中对象本身是一个函数
- 我对javascript中的一个自定义函数感到困惑,该函数将对象作为参数获取
- javascript:我需要从函数参数中获取一个对象键
- Javascript:如何附加到构造函数的原型,如果该构造函数已经在另一个对象的原型上定义
- 给定一个对象数组,创建一个函数,该函数返回一个 Object,该 Object 具有按类型分组的路径数组
- 如何使对象的函数或属性成为指向另一个对象函数的指针