JS中的call()和apply()方法

1、方法定義

call方法:

語法:call([thisObj[,arg1[, arg2[,?? [,.argN]]]]])? 實(shí)參

定義:調(diào)用一個(gè)對(duì)象的一個(gè)方法吏廉,以另一個(gè)對(duì)象替換當(dāng)前對(duì)象匈勋。

說明:

call 方法可以用來代替另一個(gè)對(duì)象調(diào)用一個(gè)方法把还。call 方法可將一個(gè)函數(shù)的對(duì)象上下文從初始的上下文改變?yōu)橛?thisObj 指定的新對(duì)象疮装。

如果沒有提供 thisObj 參數(shù)阅虫,那么 Global 對(duì)象被用作 thisObj托酸。

apply方法:

語法:apply([thisObj[,argArray]])? 實(shí)參必須寫 數(shù)組里

定義:應(yīng)用某一對(duì)象的一個(gè)方法褒颈,用另一個(gè)對(duì)象替換當(dāng)前對(duì)象柒巫。

說明:

如果 argArray 不是一個(gè)有效的數(shù)組或者不是 arguments 對(duì)象,那么將導(dǎo)致一個(gè) TypeError谷丸。

如果沒有提供 argArray 和 thisObj 任何一個(gè)參數(shù)堡掏,那么 Global 對(duì)象將被用作 thisObj, 并且無法被傳遞任何參數(shù)刨疼。



function add(a,b){

alert(a+b);}

function sub(a,b){

alert(a-b);}

add.call(sub,3,1);

這個(gè)例子中的意思就是用 add 來替換 sub泉唁,add.call(sub,3,1) == add(3,1) ,所以運(yùn)行結(jié)果為:alert(4); // 注意:js 中的函數(shù)其實(shí)是對(duì)象揩慕,函數(shù)名是對(duì) Function 對(duì)象的引用亭畜。

function Animal(){

this.name ="Animal";

this.showName = function(){

alert(this.name);}

}

function Cat(){

this.name ="Cat";}

var animal =newAnimal();

var cat =newCat();

//通過call或apply方法,將原本屬于Animal對(duì)象的showName()方法交給對(duì)象cat來使用了迎卤。

//輸入結(jié)果為"Cat"

animal.showName.call(cat,",");

//animal.showName.apply(cat,[]);


call 的意思是把 animal 的方法放到cat上執(zhí)行拴鸵,原來cat是沒有showName() 方法,現(xiàn)在是把a(bǔ)nimal 的showName()方法放到 cat上來執(zhí)行蜗搔,所以this.name 應(yīng)該是 Cat

實(shí)現(xiàn)繼承


function Animal(name){

this.name = name;

this.showName = function(){

alert(this.name);}

}

function Cat(name){

Animal.call(this, name);}

var cat =newCat("Black Cat");

cat.showName();


Animal.call(this) 的意思就是使用 Animal對(duì)象代替this對(duì)象宝踪,那么 Cat中不就有Animal的所有屬性和方法了嗎,Cat對(duì)象就能夠直接調(diào)用Animal的方法以及屬性了.

多重繼承

function Class10()

{

this.showSub = function(a,b)

{alert(a-b);}

}

function Class11()

{this.showAdd = function(a,b){

alert(a+b);}

}

function Class2()

{Class10.call(this);

Class11.call(this);}


很簡單碍扔,使用兩個(gè) call 就實(shí)現(xiàn)多重繼承了

當(dāng)然,js的繼承還有其他方法秕重,例如使用原型鏈不同,這個(gè)不屬于本文的范疇,只是在此說明call 的用法溶耘。說了call 二拐,當(dāng)然還有 apply,這兩個(gè)方法基本上是一個(gè)意思凳兵,區(qū)別在于 call 的第二個(gè)參數(shù)可以是任意類型百新,而apply的第二個(gè)參數(shù)必須是數(shù)組,也可以是arguments

還有 callee庐扫,caller..

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末饭望,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子形庭,更是在濱河造成了極大的恐慌铅辞,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件萨醒,死亡現(xiàn)場(chǎng)離奇詭異斟珊,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)富纸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門囤踩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來旨椒,“玉大人,你說我怎么就攤上這事堵漱∽凵鳎” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵怔锌,是天一觀的道長寥粹。 經(jīng)常有香客問我,道長埃元,這世上最難降的妖魔是什么涝涤? 我笑而不...
    開封第一講書人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮岛杀,結(jié)果婚禮上阔拳,老公的妹妹穿的比我還像新娘。我一直安慰自己类嗤,他們只是感情好糊肠,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著遗锣,像睡著了一般货裹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上精偿,一...
    開封第一講書人閱讀 51,115評(píng)論 1 296
  • 那天弧圆,我揣著相機(jī)與錄音,去河邊找鬼笔咽。 笑死搔预,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的叶组。 我是一名探鬼主播拯田,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼甩十!你這毒婦竟也來了船庇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤侣监,失蹤者是張志新(化名)和其女友劉穎溢十,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體达吞,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡张弛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吞鸭。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡寺董,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出刻剥,到底是詐尸還是另有隱情遮咖,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布造虏,位于F島的核電站御吞,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏漓藕。R本人自食惡果不足惜陶珠,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望享钞。 院中可真熱鬧揍诽,春花似錦、人聲如沸栗竖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狐肢。三九已至玛瘸,卻和暖如春脯颜,著一層夾襖步出監(jiān)牢的瞬間奄薇,已是汗流浹背费坊。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留同窘,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓部脚,卻偏偏與公主長得像想邦,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子委刘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容