Jon*_*ney 9 javascript closures this
我想在Javascript中这样做:
function Z( f )
{
f();
}
function A()
{
this.b = function()
{
Z( function () { this.c() } );
}
this.c = function()
{
alert('hello world!');
}
}
var foo = new A();
foo.b();
Run Code Online (Sandbox Code Playgroud)
它可以这样完成:
function Z( f )
{
f();
}
function A()
{
var self = this;
this.b = function()
{
Z( function () { self.c() } );
}
this.c = function()
{
alert('hello world!');
}
}
var foo = new A();
foo.b();
Run Code Online (Sandbox Code Playgroud)
有没有更好的办法?
保持对父级的引用(就像你一样)是一种很好的方法,但是对于你的特定示例,不需要匿名包装器,你可以直接传递函数,如下所示:
var self = this;
this.b = function()
{
Z(self.c);
}
Run Code Online (Sandbox Code Playgroud)
你可以在这里测试它,没有这个包装器,实际上不需要self变量,你可以直接使用this,如下所示:
this.b = function()
{
Z(this.c);
}
Run Code Online (Sandbox Code Playgroud)
由于下面的注释中似乎存在一些混淆,上面的代码维护this 了这个问题,如果你想this在回调中维护/ context,请使用如下:.call()
this.b = function()
{
Z.call(this, this.c);
}
Run Code Online (Sandbox Code Playgroud)
并为Z:
function Z( f )
{
f.call(this);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3696 次 |
| 最近记录: |