【发布时间】:2013-11-02 19:58:04
【问题描述】:
我有一个函数 functionWithDifferentScope,它将对象 myobject.options 作为参数。 options 对象中的一对是回调,它指向 myObject 中定义的函数:myCallback。
我想要实现的是将 myObject namespace 注入到在全局级别(由第 3 方)定义的函数的回调中。
一个简化的例子:
var myObject = {
options: {
callback: this.myCallback(this),
...,
},
init: function() {
// functionWithDifferentScope operates in the 'window' context
functionWithDifferentScope(this.options);
},
myCallback: function(namespace) {
// 'this' is window
// 'namespace' is myObject
}
}
myObject.init();
执行此脚本时,this.myCallback(this) 似乎在定义处执行(由于括号?);以及一次 myObject.init(); 被调用。在第一次执行期间,this 是 myObject,但随后通过 functionWithDifferentScope 的调用将 this 识别为 window。
有没有办法将 myObject namespace 作为参数传递给 myObject.options.callback 值?
【问题讨论】:
-
调用functionWithDifferentScope(this.options);根据上下文或您的选择,您可以使用 functionWithDifferentScope.call(this, this.options); ..这是你想要的吗?
-
@Robert
functionWithDifferentScope在全局级别运行,因此给它本地this会破坏函数的其他部分。我正在寻找一种将this传递给单个回调的方法;如果这有意义的话。 -
您能否给出一些使用示例,并注明您期望的上下文等。我知道您想要什么,但您可能需要稍微重写 myObject 以便能够更轻松地修改选项
标签: javascript namespaces parameter-passing object-literal