日期:2014-05-16  浏览次数:20408 次

javascript this的问题
var a = {b:1, c:2, k:function(){alert(this.b)}}
setTimeout(a.k, 1000);

传递a.k过去之后, k里面的this指向window了,apply方法可以改变this的指向,但是能不能通过改变a.k参数的方法来固定k方法里面的this固定指向a


------解决方案--------------------

var a = {b:1, c:2, k:function(dd){alert(this.b=dd)}}
a.k(a.b); 1

a.k(a) //输出object object

可以用传参的方式来显示,要获取的值,从a.k(a)说明this指向了a这个对象
------解决方案--------------------
setTimeout("a.k()", 1000)
------解决方案--------------------
自己写一个方法, 或者

setTimeout(function(){
...
}, 1000)
------解决方案--------------------
探讨
setTimeout("a.k()", 1000)

------解决方案--------------------
关于自己写个方法, 我再补充一下吧

这点也有两种方法, 你估计喜欢第一种, 所以只讲第一种

JScript code

Function.prototype.createDelegate = function(param, scope){
    var me = this;
    return function(){
        me.call(scope, param);
    };
}


var a = {b:1, c:2, k:function(param){alert(param);alert(this.b)}}
setTimeout(a.k.createDelegate('ddd', a), 1000);

------解决方案--------------------
setTimeout(function()

a.k('test'); //要调什么函数,传什么参数随便写
}, 1000);

至于this的指向,通过a的方法调用的,this指向对象a