我已经构建了一个标准的javascript模块(模式),其中包含许多
私有方法和变量。我发现在使用this
后,我正在努力维持$.each
上下文指向我的模块。
我知道jQuery $.each
方法创建了一个闭包,因此创建了一个新的" context"但是我确实希望继续让this
引用该模块。我发现使用initFruit.call()调用我模块的私有函数(示例中为initFruit()
)并传入self
this
的副本(范围内的#34;")用于该函数的 ,但是只要该函数调用另一个函数,上下文就会再次丢失。
我真的不想一直用.call()来调用我的所有私有函数只是因为我在调用堆栈中进一步使用了$.each
所以如何使用{{1没有原始上下文丢失?
答案 0 :(得分:0)
在定义内部闭包的范围上下文中,用this
代替(例如:90%的私有“方法”),这是获得“全局范围”{{1}的最简单方法} element用于在主代码块的第一行中定义一个变量,通常为this
。在您的情况下,“全局”self
是this
,因此这就是我要做的事情,只需要用“self”替换“this”就可以引用该对象{{1只有当你想引用内部闭包时:
Window
答案 1 :(得分:0)
您可以尝试将功能绑定到您想要的范围吗?有点像下面
var self = this;
$.each([1,2,3,4], function(index, item) {
// do something
// self === this
}.bind(this));
或者,如果您需要较旧的浏览器支持,请尝试使用像lodash或其他类似的库来执行此操作。或jquery's $.proxy应该有效。