今天寫代碼時遇到一個問題,this指標的問題,先把代碼貼上<script type="text/javascript">
window.onload=function()
{
var m=new main('aaaa');
m.run();
}
var main=function(param)
{
this.param=param;
this.run=function()
{
setTimeout(this.Change,3000);
}
this.Change=function()
{
alert(this.param);
}
}
</script>
這個代碼看起來很清晰,但是會報錯,原因我想大概就是在隔了三秒執行Change方法時找不到this.param,this.Change的this就指向了window,不是執行個體m了,整了半天沒有整明白,沒辦法只好上網求助,結果有高手給除瞭解決方法,修改this指標。再來看新代碼: <script type="text/javascript">
window.onload=function()
{
var m=new main('aaaa');
m.run();
}
var main=function(param)
{
this.param=param;
this.run=function()
{
var self=this;
setTimeout(self.Change.setThis(self),3000);
}
this.Change=function()
{
alert(this.param);
}
Function.prototype.setThis = function(object)
{
var __method = this;
return function()
{
__method.apply(object, arguments);
} ;
};
}
</script>
其中添加了一段修改指正的代碼,修改指標代碼: Function.prototype.setThis = function(object)
{
var __method = this;
return function()
{
__method.apply(object, arguments);
} ;
};
使用的時候要定義一個變數self=this; 用self來調用。最主要的是不理解apply到底是做啥子用的,只能先記下來,以後慢慢理解!