我想知道如何处理JavaScript中的闭包中的成员变量。以下代码提醒“6”。
function testy()
{
function blah()
{
this.a = 5;
this.func = function()
{
this.a = 6;
alert(this.a);
}
}
var x = new blah;
x.func();
}
但此代码提醒5。
function testy()
{
function execute(func)
{
func();
}
function blah()
{
this.a = 5;
this.func = function()
{
execute(function()
{
this.a = 6;
});
alert(this.a);
}
}
var x = new blah;
x.func();
}
如何传递仍然访问封闭对象的成员变量的闭包?
答案 0 :(得分:1)
execute(function()
{
this.a = 6;
});
function execute(func)
{
func();
}
您将该函数调用为func();
,默认情况下不指定上下文this
将解析为浏览器中的window
全局上下文。您可以使用三个选项这里。
制作this
本地
var that = this;
execute(function()
{
that.a = 6;
});
现在that
指向正确的this
。
将this
范围绑定到函数
execute((function()
{
this.a = 6;
}).bind(this));
这会将正确/预期的this
范围绑定到您的函数。请注意,Function.prototype.bind
是ES5,会破坏旧浏览器。 _.bind
是一种合理的跨浏览器替代方案。
编辑执行
function execute(f, context) {
f.call(context);
}
execute(function() {
this.a = 6;
}, this);
您将上下文作为执行的额外参数传递。然后执行将调用Function.prototype.call
以确保使用所需的上下文调用该函数
答案 1 :(得分:0)
试试这个:
function blah()
{
this.a = 5;
this.func = function()
{
var self = this;
execute(function()
{
self.a = 6;
});
alert(this.a);
}
}