利用javascript中的call實現(xiàn)繼承
更新時間:2007年01月22日 00:00:00 作者:
昨天阿丹傳了一個javascript中的重載例子給我,感覺不錯.雖然到現(xiàn)在還是不太明白.怎么實現(xiàn)的.但還是貼出來.
實現(xiàn)setTimeout傳object對象
看以下代碼實現(xiàn)向里面的function 傳參數(shù)
<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參考中的說明:調(diào)用一個對象的一個方法,以另一個對象替換當前對象。call([thisObj[,arg1[, arg2[, [,.argN]]]]]),但是沒有示例
apply方法JScript參考中的說明:應用某一對象的一個方法,用另一個對象替換當前對象。apply([thisObj[,argArray]])
實際上這兩個的作用幾乎是相同的,要注意的地方是call(thisObj[,arg1[, arg2[,)中的arg參數(shù)可以是變量,而apply([thisObj[,argArray]])中的參數(shù)為數(shù)組集合。
今早又看到一篇利用call實現(xiàn)繼承的例子.呵呵..也一并貼出來.這個例子比較簡單.就算是由淺入深吧
<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);
}
var test2=function(){ //私有方法,子類不能調(diào)用
alert("這個方法是父類的私有方法");
}
}
function father2(){
this.email="xlingFairy#hotmail.com";
}
function suber(){//子類
father.call(this);//通過這一句來繼承父類(father)類的可見變量及方法(this)
}
function sun(){
suber.call(this);
father2.call(this);//和上面的一句放在一起,實現(xiàn)多重繼承!爽??!
}
var mySuber=new suber();
mySuber.test("參數(shù)是從子類的實例里傳入的");
//mySuber.test2(); //這一句會發(fā)生錯誤碼,因為test2是父類的私有類
alert("父類的私有變量,子類不能讀取:" + mySuber.var_private);
alert("父類的公有變量,子類可以讀取" + mySuber.var_public);
var mySun=new sun();
mySun.test("這個是從孫子級的實例里傳入的參數(shù)");
alert("父類的私有變量,子類不能讀取:" + mySun.var_private);
alert("父類的公有變量,子類可以讀取" + mySun.var_public);
alert(mySun.email);
</script>
實現(xiàn)setTimeout傳object對象
看以下代碼實現(xiàn)向里面的function 傳參數(shù)
<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參考中的說明:調(diào)用一個對象的一個方法,以另一個對象替換當前對象。call([thisObj[,arg1[, arg2[, [,.argN]]]]]),但是沒有示例
apply方法JScript參考中的說明:應用某一對象的一個方法,用另一個對象替換當前對象。apply([thisObj[,argArray]])
實際上這兩個的作用幾乎是相同的,要注意的地方是call(thisObj[,arg1[, arg2[,)中的arg參數(shù)可以是變量,而apply([thisObj[,argArray]])中的參數(shù)為數(shù)組集合。
今早又看到一篇利用call實現(xiàn)繼承的例子.呵呵..也一并貼出來.這個例子比較簡單.就算是由淺入深吧
<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);
}
var test2=function(){ //私有方法,子類不能調(diào)用
alert("這個方法是父類的私有方法");
}
}
function father2(){
this.email="xlingFairy#hotmail.com";
}
function suber(){//子類
father.call(this);//通過這一句來繼承父類(father)類的可見變量及方法(this)
}
function sun(){
suber.call(this);
father2.call(this);//和上面的一句放在一起,實現(xiàn)多重繼承!爽??!
}
var mySuber=new suber();
mySuber.test("參數(shù)是從子類的實例里傳入的");
//mySuber.test2(); //這一句會發(fā)生錯誤碼,因為test2是父類的私有類
alert("父類的私有變量,子類不能讀取:" + mySuber.var_private);
alert("父類的公有變量,子類可以讀取" + mySuber.var_public);
var mySun=new sun();
mySun.test("這個是從孫子級的實例里傳入的參數(shù)");
alert("父類的私有變量,子類不能讀取:" + mySun.var_private);
alert("父類的公有變量,子類可以讀取" + mySun.var_public);
alert(mySun.email);
</script>
相關文章
jstl中判斷l(xiāng)ist中是否包含某個值的簡單方法
下面小編就為大家?guī)硪黄猨stl中判斷l(xiāng)ist中是否包含某個值的簡單方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-10-10利用javascript實現(xiàn)的三種圖片放大鏡效果實例(附源碼)
這篇文章主要介紹了利用javascript實現(xiàn)的幾種放大鏡效果,很實用一款漂亮的js圖片放大鏡特效,常見于電商網(wǎng)站上產(chǎn)品頁,用來放大展示圖片細節(jié),很有實用性,推薦下載學習研究。文中提供了完整的源碼供大家下載,需要的朋友可以參考借鑒,一起來看看吧。2017-01-01