昨天阿丹傳了一個javascript中的重載例子給我,感覺不錯.雖然到現在還是不太明白.怎么實現的.但還是貼出來.
實現setTimeout傳object對象
看以下代碼實現向里面的function 傳參數
<script type="text/javascript">
var _st = window.setTimeout;
window.setTimeout = function(fRef, mDelay) {
if(typeof fRef == 'function'){
var argu = Array.prototype.slice.call(arguments,2);
var f = (function(){ fRef.apply(null, argu); });
return _st(f, mDelay);
}
return _st(fRef,mDelay);
}
function test(x){
alert(x);
}
window.setTimeout(test,1000,'fason');
</script>
call方法JScript參考中的說明:調用一個對象的一個方法,以另一個對象替換當前對象。call([thisObj[,arg1[, arg2[, [,.argN]]]]]),但是沒有示例
apply方法JScript參考中的說明:應用某一對象的一個方法,用另一個對象替換當前對象。apply([thisObj[,argArray]])
實際上這兩個的作用幾乎是相同的,要注意的地方是call(thisObj[,arg1[, arg2[,)中的arg參數可以是變量,而apply([thisObj[,argArray]])中的參數為數組集合。
今早又看到一篇利用call實現繼承的例子.呵呵..也一并貼出來.這個例子比較簡單.就算是由淺入深吧
<script language="javascript" type="text/javascript">
function father(){//父類
var self=this; //私有變量,子類里不會繼承!
var var_private="private variable"; //私有變量
this.var_public="public variable"; //公有變量
this.author="xling";
this.test=function(msg){ //公有方法
alert("該方法位于父類 :" + msg + "/n" + self.author);
}