国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JavaScript > 正文

Javascript中call的兩種用法實(shí)例

2019-11-20 21:28:12
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

用法一(常見(jiàn)用法):

表現(xiàn)形式為:一個(gè)對(duì)象.方法.call(另一個(gè)對(duì)象),意義是用另一個(gè)對(duì)象代替當(dāng)前對(duì)象,執(zhí)行當(dāng)前對(duì)象的方法。先看示例:

復(fù)制代碼 代碼如下:

function Class1(){
    this.name = "class1";
    this.showName = function(){
        alert(this.name);
    }
}
function Class2(){
    this.name = "class2";
}
var c1 = new Class1();
var c2 = new Class2();

c1.showName.call(c2);
c2.showName();        //不能執(zhí)行

我們先分別定義了兩個(gè)function,分別是Class1和Class2,它們的主要區(qū)別是Class2比Class1多了一個(gè)showName()方法。接著定義了與Class1、Class2對(duì)應(yīng)的對(duì)象c1和c2,這時(shí)候我們清醒的知道,c1有showName()方法而c2沒(méi)有。但是奇跡出現(xiàn)了,當(dāng)我們執(zhí)行 c1.shoName.call(c2) 時(shí),會(huì)彈出c2的name值,即"class2"。其實(shí),我們執(zhí)行的任然是c1的方法,只不過(guò)臨時(shí)起意地把對(duì)象c2偷換成對(duì)象c1,執(zhí)行完畢后,它們?nèi)稳皇嵌x時(shí)的樣子,c2并沒(méi)有因此多了些什么方法。為了檢測(cè)c2有沒(méi)有多了方法,示例加了行 c2.showNmae(); 它是不能被執(zhí)行的,瀏覽器會(huì)報(bào)出 Object #<Class2> has no method 'showName' 的錯(cuò)誤。

為什么要這么做?前面說(shuō)了,這是一種臨時(shí)起意的使用方法,我們就是利用其高效的編程而已。但這并不是沒(méi)有限制的,假設(shè)用c1和c2表示被替換的對(duì)象和替換對(duì)象,用fun1表示c1固有的方法。1、當(dāng)fun1不需要參數(shù),且不用到父函數(shù)中的任意局部變量時(shí),其實(shí)c1.fun1.call(c2) 和 c1.fun1() 沒(méi)什么區(qū)別;2、當(dāng)fun1不需要參數(shù)但是用到父函數(shù)中的變量,那么就要求生成c1和c2的function有相同名稱(chēng)的那些個(gè)被fun1使用的變量;3、當(dāng)fun1需要參數(shù)時(shí),形式要改寫(xiě)成c1.fun1.call(c2, 參數(shù)1, 參數(shù)2, ...參數(shù)n),這個(gè)時(shí)候生成c1的function中的變量名就不必和生成c2的function的變量名同名了,只需對(duì)應(yīng)即可。其實(shí),我們?cè)谟玫絚all的這種用法時(shí),c2和c1往往在結(jié)構(gòu)和功能上已經(jīng)有很大的相似性了,所以上述三點(diǎn)很容易避免。

用法二:

在function的定義過(guò)程中使用,表現(xiàn)形式:另一個(gè)已存在函數(shù).call(this),它可以將另一個(gè)已存在函數(shù)的變量、方法統(tǒng)統(tǒng)克隆到自己的函數(shù)中,實(shí)現(xiàn)一種類(lèi)似于繼承的功能。看個(gè)例子:

復(fù)制代碼 代碼如下:

function Animal(name){
    this.name = name;
    this.showName = function(){
        alert(this.name);
    }
};

var animal = new Animal("small_animal");
animal.showName();    //alert("small_animal")

function Cat(name){
    Animal.call(this, name);
};

//var Animal = null;    //取消注釋試一試

var cat = new Cat("black_cat");
cat.showName();     //alert("black_cat")

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 青龙| 娄烦县| 静安区| 开阳县| 武冈市| 文水县| 嘉荫县| 湖南省| 宜良县| 山西省| 棋牌| 怀来县| 平利县| 来安县| 合江县| 文安县| 土默特左旗| 文登市| 永和县| 新蔡县| 越西县| 阿勒泰市| 韶山市| 赤城县| 白朗县| 杭锦旗| 水富县| 老河口市| 民权县| 沭阳县| 辉县市| 县级市| 什邡市| 渭源县| 江西省| 姚安县| 安岳县| 舒城县| 静乐县| 镇康县| 淳安县|