javascript:为什么匿名函数作为参数传递不能访问对象中的“this”?

时间:2017-02-03 16:35:32

标签: javascript scope this

我有这段代码:

function Const(val)
{   
    this.value = val;
    this.meth = function()
    {   
        var self = this;
        function rfunc()
        {
            console.log(self);
        }
        rfunc()
    }   
}
var obj = new Const("test");
obj.meth();

结果是:

  

Const {value:“test”};

但是当我尝试这段代码时:

function Const(val)
{   
    this.value = val;
    this.meth = function(callback)
    {   
        var self = this;
        callback();
    }   
}

var obj = new Const("test");
obj.meth(function(){
console.log(self);
});

结果是:

  

窗口对象。

我希望结果就像第一个例子。为什么会这样?

我知道当我将代码更改为:

function Const(val)
{   
    this.value = val;
    this.meth = function(callback)
    {   
        //var self = this;
        callback.call(this);
    }   
}

var obj = new Const("test");
obj.meth(function(){
console.log(this);
});

然后结果就像第一个例子......

0 个答案:

没有答案