電腦百科:帶你玩轉call和apply
帶你玩轉call和apply方法
在ECMAScript v3中,給Function原型定義了這兩個方法,這兩個方法的作用都是一樣的:使用這兩個方法可以像調用其他對象方法一樣調用函數,這句話是從書上抄的,至少我是沒讀明白這是什麼意思。
下面說簡單易懂的,先看段代碼:
複製代碼 代碼如下:
function Introduce(name,age)
{
e("My name is "+name+".I am "+age);
}
var p=new People();
(p,"Windking",20);
就說上面的這段代碼,用了call之後,Introduce就成了p的方法,不知道這樣說你明白了麼?使用了call方法,上述的`代碼就等同於了這個代碼:
複製代碼 代碼如下:
function People(name,age)
{
=name;
=age;
oduce=function(){
e("My name is "+name+".I am "+age);
};
}
明白意思了麼?apply也是一樣的作用。
好,我們不管這個方法到底能在實際中用到什麼,先講語法。
call接受至少一個參數,call的第一個參數是指你所需要的對象,比如說上面的那個例子,Introduce方法希望他能夠被對象p所調用,那麼就把p作爲call的第一個參數。剩餘的參數個數是任意的,作用是作爲Introduce方法的參數。順序按照Introduce參數聲明的順序。比如(p,"Windking",20),假如Introduce是p的一個實例方法,那麼也就是這樣的:oduce("Windking",20)。明白了麼?記住,傳入參數的順序要與函數聲明參數的順序保持一致。
瞭解了call,apply方法就容易理解了,apply和call唯一的區別是call接受至少一個參數,而apply只接受兩個參數,第一個參數與call一樣,第二個參數是一個帶下標的集合,比如說(p,"Windking",20)就可以改寫成y(p,["Windking",20])了。這次明白了麼?
那究竟這兩個方法有什麼用呢?如果我們只是爲了實現上面的那個功能,把Introduce實現爲People的方法不是更好麼?
我把應用總結爲兩條:
1.共享方法。先看代碼:
複製代碼 代碼如下:
function Introduce(name,age)
{
e("My name is "+name+".I am "+age);
}
這是一個自我介紹的方法,現在假設我們有一個男孩的類,和一個女孩的類(在這裏我只是爲了演示,在實際中,會用一個People的父類),因爲他們的Introduce都是一樣的,於是我們就可以共享這個方法。
複製代碼 代碼如下:
function Boy()
{
ntroduce=function(){
(this,name,age);
};
}
同理,Girl中也是一樣,這樣的話,我們就可以避免寫代碼了。其實這個有些牽強,因爲我們完全也可以寫成:
複製代碼 代碼如下:
function Boy()
{
ntroduce=function(){
Introduce(name,age);
}
}
但是這個時候,我們如果用Apply的話,就看上去簡單多了:
複製代碼 代碼如下:
function Boy()
{
ntroduce=function(){
y(this,arguments);
};
}
是不是簡單了很多呢?如果參數很多的話,那麼是不是不用再寫那麼一場串密密麻麻的參數了呢!
2.跨域調用
看一個簡單的例子(僅爲演示,無任何價值):
複製代碼 代碼如下:
function Boy(name,age)
{
ntroduce=function(){
e("My name is "+name+".I am "+age);
}
}
function Girl(name,age)
{
}
這是一個Boy和一個Girl類,然後我們寫如下的代碼:
var b=new Boy("Windking",20);
ntroduce();
這沒有任何異議。假設有一天有一個女孩也希望做一下自我介紹,只是偶然用一下,那麼我就沒有必要修改Girl類,因爲其他的女孩比較害羞,不喜歡自我介紹。那麼這個時候我就可以這樣。
var g=new Girl("Xuan",22);
(g,"Xuan",22);
3.真正用處——繼承
好了,上面都是雕蟲小技,不登大雅之堂,下面纔是call和apply最廣泛的應用,就是用於構造繼承。
-
辦公電腦請示經典大全【15篇】
辦公電腦請示經典1xx縣人民政府:根據縣政府關於加快嶽西縣職教中心建設的部署,原嶽西縣高級職業中學、嶽西縣第二職業技術學校、來榜高級職業中學已於20xx年七月正式合併組建嶽西縣職業技術教育中心,原來榜高級職業中學的土地和房產已閒置,爲確保國有資產不流失、...
-
電腦住宅課後反思集合
在辦理事務和工作生活中,我們的任務之一就是教學,反思意爲自我反省。那麼問題來了,反思應該怎麼寫?以下是小編精心整理的電腦住宅課後反思集合,歡迎大家分享。電腦住宅課後反思集合1今天帶領學生一起學習了《電腦住宅》這一課,這是一篇科普文章,通過學習,學生能夠領悟...
-
電腦買賣合同(優秀15篇)
隨着法律觀念的日漸普及,合同對我們的幫助越來越大,它也是實現專業化合作的紐帶。那麼一份詳細的合同要怎麼寫呢?以下是小編爲大家整理的電腦買賣合同,希望能夠幫助到大家。電腦買賣合同1根據《中華人民共和國合同法》、《中華人民共和國民法通則》等法律規定,甲乙...
-
電腦常見問題合集【精華15篇】
電腦常見問題合集1內存出現問題一部分是因爲升級內存,但由於內存種類的不匹配,往往會遇到一些麻煩,具體出現的內存問題及支招如下。1、無法正常開機支招:遇到這類現象主要有三個解決的途徑:第一,更換內存的位置,這是最爲簡單也是最爲常用的一種方法,一般是把低速的老內...