隱式轉(zhuǎn)換
包裝對(duì)象
原始類型是沒(méi)有對(duì)象屬性的颗品,但是類似a.t或者a.length等操作牺蹄,會(huì)轉(zhuǎn)換成一個(gè)臨時(shí)對(duì)象稠集,但是當(dāng)返回后,臨時(shí)對(duì)象被銷毀库糠,所以alert(a.t)為undefined
類型檢測(cè)
typeof返回字符串伙狐,判斷基本類型涮毫,函數(shù)對(duì)象非常方便,對(duì)其他對(duì)象不怎方便
instanceof判斷對(duì)象類型贷屎,基于原型鏈判斷罢防;typeof返回字符串,通常用于原始類型以及函數(shù)對(duì)象唉侄,如判斷一個(gè)東西是不是原始類型或者函數(shù)咒吐,用typeof比較合適。
var a=b=1;? a被創(chuàng)建為局部/全局(看位置)變量属划,b被創(chuàng)建為全局變量
區(qū)別:函數(shù)前置恬叹,函數(shù)聲明會(huì)被預(yù)先處理,可在其前面調(diào)用函數(shù)同眯,函數(shù)表達(dá)式則不行绽昼。
obj.hasOwnProperty('z'); //true? ?檢測(cè)obj上是否存在z屬性(判斷自身屬性是否存在)
!注意:用for in遍歷屬性有可能會(huì)把原型鏈上的屬性也遍歷出來(lái)须蜗,但是順序是不確定的
hasOwnProperty() //判斷對(duì)象是否存在屬性硅确,同時(shí)可用來(lái)過(guò)濾掉原型鏈上的屬性(巧用)? ? ?propertyIsEnumerable() //判斷對(duì)象是否可枚舉
!明肮!注意:defineProperty定義屬性默認(rèn)等于false菱农;巧用&&可以用來(lái)判斷屬性是否存在;柿估!=一般等于空循未,undefined等于null
sort按字母大小排序
arr.sort(function(a,b){
? ? return a - b?
});
slice():索引切片,左閉右開區(qū)間官份,負(fù)數(shù)索引表示從后往前只厘,對(duì)原數(shù)組進(jìn)行修改
arr.forEach(function(a,index,n){
})
a:值,index:索引舅巷,n:true/false
reduce() 方法接收一個(gè)函數(shù)作為累加器羔味,數(shù)組中的每個(gè)值(從左到右)開始縮減,最終計(jì)算為一個(gè)值钠右。
reduceRight()方法的功能和reduce()功能是一樣的赋元,不同的是reduceRight()從數(shù)組的末尾向前將數(shù)組中的數(shù)組項(xiàng)做累加。
第一個(gè)參數(shù):查找的元素飒房;第二個(gè)參數(shù):開始查找的位置
函數(shù):
函數(shù)聲明可聲明前置搁凸,函數(shù)表達(dá)式不可以
不常見(jiàn),a狠毯、b:形參护糖,第三個(gè):字符串代碼,存在安全隱患
this
閉包:
閉包的作用:結(jié)合實(shí)際案例:
https://blog.csdn.net/u011086209/article/details/88858277
作用域:
在javascript中嚼松,是沒(méi)有塊級(jí)作用域這種說(shuō)法的
匿名函數(shù)(自執(zhí)行)
匿名函數(shù)顧名思義指的是沒(méi)有名字的函數(shù)嫡良,在實(shí)際開發(fā)中使用的頻率非常高锰扶!也是學(xué)好JS的重點(diǎn)。
匿名函數(shù):沒(méi)有實(shí)際名字的函數(shù)寝受。
首先我們聲明一個(gè)普通函數(shù):
//聲明一個(gè)普通函數(shù)坷牛,函數(shù)的名字叫fn
function fn(){
??? console.log("張培躍");
}
然后將函數(shù)的名字去掉即是匿名函數(shù):
//匿名函數(shù),咦很澄,運(yùn)行時(shí)京闰,你會(huì)發(fā)現(xiàn)報(bào)錯(cuò)啦!
function (){
??? console.log("張培躍");
}
到此甩苛,你會(huì)發(fā)現(xiàn)單獨(dú)運(yùn)行一個(gè)匿名函數(shù)蹂楣,由于不符合語(yǔ)法要求,報(bào)錯(cuò)啦浪藻!解決方法只需要給匿名函數(shù)包裹一個(gè)括號(hào)即可:
//匿名函數(shù)在其它應(yīng)用場(chǎng)景括號(hào)可以省略
(function (){
??? //由于沒(méi)有執(zhí)行該匿名函數(shù)捐迫,所以不會(huì)執(zhí)行匿名函數(shù)體內(nèi)的語(yǔ)句乾翔。
??? console.log("張培躍");
})
如果需要執(zhí)行匿名函數(shù)爱葵,在匿名函數(shù)后面加上一個(gè)括號(hào)即可立即執(zhí)行!
(function (){
??? //此時(shí)會(huì)輸出張培躍
??? console.log("張培躍");
})()
倘若需要傳值反浓,直接將參數(shù)寫到括號(hào)內(nèi)即可:
(function (str){
??? //此時(shí)會(huì)輸出張培躍好帥萌丈!
??? console.log("張培躍"+str);
})("好帥!")
匿名函數(shù)的應(yīng)用場(chǎng)景
1雷则、事件
<input type="button" value="點(diǎn)我傲疚怼!" id="sub">
<script>
??? //獲得按鈕元素
??? var sub=document.querySelector("#sub");
??? //給按鈕增加點(diǎn)擊事件月劈。
??? sub.onclick=function(){
??????? alert("當(dāng)點(diǎn)擊按鈕時(shí)會(huì)執(zhí)行到我哦度迂!");
??? }
</script>
2、對(duì)象
var obj={
??? name:"張培躍",
??? age:18,
??? fn:function(){
??????? return "我叫"+this.name+"今年"+this.age+"歲了猜揪!";
??? }
};
console.log(obj.fn());//我叫張培躍今年18歲了惭墓!
3、函數(shù)表達(dá)式
//將匿名函數(shù)賦值給變量fn而姐。
var fn=function(){
??? return "我是一只小小小小留下腊凶,怎么飛也飛不高!"
}
//調(diào)用方式與調(diào)用普通函數(shù)一樣
console.log(fn());//我是一只小小小小留下踢关,怎么飛也飛不高央串!
4狈邑、回調(diào)函數(shù)
setInterval(function(){
??? console.log("我其實(shí)是一個(gè)回調(diào)函數(shù),每次1秒鐘會(huì)被執(zhí)行一次");
},1000);
5风瘦、返回值
//將匿名函數(shù)作為返回值
function fn(){
??? //返回匿名函數(shù)
??? return function(){
??????? return "張培躍";
??? }
}
//調(diào)用匿名函數(shù)
console.log(fn()());//張培躍
//或
var box=fn();
console.log(box());//張培躍
模仿塊級(jí)作用域
塊級(jí)作用域,有的地方稱為私有作用域公般。JavaScript中是沒(méi)有塊級(jí)作用域的万搔,例如:
if(1==1){//條件成立器躏,執(zhí)行if代碼塊語(yǔ)句。
??? var a=12;//a為全局變量
}
console.log(a);//12
for(var i=0;i<3;i++){
??? console.log(i);
}
console.log(i);//4
if(){}for(){}等沒(méi)有自己的作用域蟹略。如果有登失,出了自己的作用域,聲明的變量就會(huì)立即被銷毀了挖炬。但是咱們可以通過(guò)匿名函數(shù)來(lái)模擬塊級(jí)作用域:
(function(){
??? //這里是我們的塊級(jí)作用域(私有作用域)
})();
嘗試塊級(jí)作用域:
function fn(){
??? (function(){
??????? var la="啦啦啦揽浙!";
??? })();
??? console.log(la);//報(bào)錯(cuò)---la is not defined
}
fn();
匿名函數(shù)的作用:
1、通過(guò)匿名函數(shù)可以實(shí)現(xiàn)閉包意敛,關(guān)于閉包在后面的文章中會(huì)重點(diǎn)講解馅巷。在這里簡(jiǎn)單介紹一下:閉包是可以訪問(wèn)在函數(shù)作用域內(nèi)定義的變量的函數(shù)。若要?jiǎng)?chuàng)建一個(gè)閉包草姻,往往都需要用到匿名函數(shù)钓猬。
2、模擬塊級(jí)作用域撩独,減少全局變量敞曹。執(zhí)行完匿名函數(shù),存儲(chǔ)在內(nèi)存中相對(duì)應(yīng)的變量會(huì)被銷毀综膀,從而節(jié)省內(nèi)存澳迫。再者,在大型多人開發(fā)的項(xiàng)目中剧劝,使用塊級(jí)作用域橄登,會(huì)大大降低命名沖突的問(wèn)題,從而避免產(chǎn)生災(zāi)難性的后果讥此。自此開發(fā)者再也不必?fù)?dān)心搞亂全局作用域了拢锹。
執(zhí)行上下文:
OOP
Object.create()方法創(chuàng)建一個(gè)新對(duì)象,使用現(xiàn)有的對(duì)象來(lái)提供新創(chuàng)建的對(duì)象的__proto__萄喳。
用于繼承Person.prototype,避免對(duì)Person.prototype造成污染
bind函數(shù)沒(méi)有prototype屬性
hasOwnProperty()?方法會(huì)返回一個(gè)布爾值卒稳,指示對(duì)象自身屬性中是否具有指定的屬性(也就是,是否有指定的鍵)取胎。
繼承:
第一種不可以展哭,會(huì)污染Person.prototype屬性
js繼承的6種方式
想要繼承,就必須要提供個(gè)父類(繼承誰(shuí)闻蛀,提供繼承的屬性)
一匪傍、原型鏈繼承
重點(diǎn):讓新實(shí)例的原型等于父類的實(shí)例。
特點(diǎn):1觉痛、實(shí)例可繼承的屬性有:實(shí)例的構(gòu)造函數(shù)的屬性役衡,父類構(gòu)造函數(shù)屬性,父類原型的屬性薪棒。(新實(shí)例不會(huì)繼承父類實(shí)例的屬性J中)
缺點(diǎn):1榕莺、新實(shí)例無(wú)法向父類構(gòu)造函數(shù)傳參。
2棵介、繼承單一钉鸯。
3、所有新實(shí)例都會(huì)共享父類實(shí)例的屬性邮辽。(原型上的屬性是共享的唠雕,一個(gè)實(shí)例修改了原型屬性,另一個(gè)實(shí)例的原型屬性也會(huì)被修改6质觥)
二岩睁、借用構(gòu)造函數(shù)繼承
重點(diǎn):用.call()和.apply()將父類構(gòu)造函數(shù)引入子類函數(shù)(在子類函數(shù)中做了父類函數(shù)的自執(zhí)行(復(fù)制))
特點(diǎn):1、只繼承了父類構(gòu)造函數(shù)的屬性揣云,沒(méi)有繼承父類原型的屬性捕儒。
2、解決了原型鏈繼承缺點(diǎn)1邓夕、2刘莹、3。
3翎迁、可以繼承多個(gè)構(gòu)造函數(shù)屬性(call多個(gè))栋猖。
4、在子實(shí)例中可向父實(shí)例傳參汪榔。
缺點(diǎn):1、只能繼承父類構(gòu)造函數(shù)的屬性肃拜。
2痴腌、無(wú)法實(shí)現(xiàn)構(gòu)造函數(shù)的復(fù)用。(每次用每次都要重新調(diào)用)
3燃领、每個(gè)新實(shí)例都有父類構(gòu)造函數(shù)的副本士聪,臃腫。
三猛蔽、組合繼承(組合原型鏈繼承和借用構(gòu)造函數(shù)繼承)(常用)
重點(diǎn):結(jié)合了兩種模式的優(yōu)點(diǎn)剥悟,傳參和復(fù)用
特點(diǎn):1、可以繼承父類原型上的屬性曼库,可以傳參区岗,可復(fù)用。
2毁枯、每個(gè)新實(shí)例引入的構(gòu)造函數(shù)屬性是私有的慈缔。
缺點(diǎn):調(diào)用了兩次父類構(gòu)造函數(shù)(耗內(nèi)存),子類的構(gòu)造函數(shù)會(huì)代替原型上的那個(gè)父類構(gòu)造函數(shù)种玛。
四藐鹤、原型式繼承
重點(diǎn):用一個(gè)函數(shù)包裝一個(gè)對(duì)象瓤檐,然后返回這個(gè)函數(shù)的調(diào)用,這個(gè)函數(shù)就變成了個(gè)可以隨意增添屬性的實(shí)例或?qū)ο笥榻凇bject.create()就是這個(gè)原理挠蛉。
特點(diǎn):類似于復(fù)制一個(gè)對(duì)象,用函數(shù)來(lái)包裝肄满。
缺點(diǎn):1碌秸、所有實(shí)例都會(huì)繼承原型上的屬性。
2悄窃、無(wú)法實(shí)現(xiàn)復(fù)用讥电。(新實(shí)例屬性都是后面添加的)
五、寄生式繼承
重點(diǎn):就是給原型式繼承外面套了個(gè)殼子轧抗。
優(yōu)點(diǎn):沒(méi)有創(chuàng)建自定義類型恩敌,因?yàn)橹皇翘琢藗€(gè)殼子返回對(duì)象(這個(gè)),這個(gè)函數(shù)順理成章就成了創(chuàng)建的新對(duì)象横媚。
缺點(diǎn):沒(méi)用到原型纠炮,無(wú)法復(fù)用。
六灯蝴、寄生組合式繼承(常用)
寄生:在函數(shù)內(nèi)返回對(duì)象然后調(diào)用
組合:1恢口、函數(shù)的原型等于另一個(gè)實(shí)例。2穷躁、在函數(shù)中用apply或者call引入另一個(gè)構(gòu)造函數(shù)耕肩,可傳參
重點(diǎn):修復(fù)了組合繼承的問(wèn)題
繼承這些知識(shí)點(diǎn)與其說(shuō)是對(duì)象的繼承,更像是函數(shù)的功能用法问潭,如何用函數(shù)做到復(fù)用猿诸,組合,這些和使用繼承的思考是一樣的狡忙。上述幾個(gè)繼承的方法都可以手動(dòng)修復(fù)他們的缺點(diǎn)梳虽,但就是多了這個(gè)手動(dòng)修復(fù)就變成了另一種繼承模式。
這些繼承模式的學(xué)習(xí)重點(diǎn)是學(xué)它們的思想灾茁,不然你會(huì)在coding書本上的例子的時(shí)候窜觉,會(huì)覺(jué)得明明可以直接繼承為什么還要搞這么麻煩。就像原型式繼承它用函數(shù)復(fù)制了內(nèi)部對(duì)象的一個(gè)副本北专,這樣不僅可以繼承內(nèi)部對(duì)象的屬性禀挫,還能把函數(shù)(對(duì)象,來(lái)源內(nèi)部對(duì)象的返回)隨意調(diào)用逗余,給它們添加屬性特咆,改個(gè)參數(shù)就可以改變?cè)蛯?duì)象,而這些新增的屬性也不會(huì)相互影響。
Javascript是弱類型腻格,不想java画拾,沒(méi)有絕對(duì)的機(jī)制去實(shí)現(xiàn)參數(shù)重載,因?yàn)楹瘮?shù)不確定菜职,傳入個(gè)數(shù)可以任意青抛。
正則表達(dá)式:
垃圾回收機(jī)制
垃圾回收
JavaScript 中的內(nèi)存管理是自動(dòng)執(zhí)行的,而且是不可見(jiàn)的酬核。我們創(chuàng)建基本類型蜜另、對(duì)象、函數(shù)……所有這些都需要內(nèi)存嫡意。
當(dāng)不再需要某樣?xùn)|西時(shí)會(huì)發(fā)生什么? JavaScript 引擎是如何發(fā)現(xiàn)并清理它?
可達(dá)性
JavaScript 中內(nèi)存管理的主要概念是可達(dá)性举瑰。
簡(jiǎn)單地說(shuō),“可達(dá)性” 值就是那些以某種方式可訪問(wèn)或可用的值蔬螟,它們被保證存儲(chǔ)在內(nèi)存中此迅。
1. 有一組基本的固有可達(dá)值,由于顯而易見(jiàn)的原因無(wú)法刪除旧巾。例如:
本地函數(shù)的局部變量和參數(shù)
當(dāng)前嵌套調(diào)用鏈上的其他函數(shù)的變量和參數(shù)
全局變量
還有一些其他的耸序,內(nèi)部的
這些值稱為根。
2. 如果引用或引用鏈可以從根訪問(wèn)任何其他值鲁猩,則認(rèn)為該值是可訪問(wèn)的坎怪。
例如,如果局部變量中有對(duì)象廓握,并且該對(duì)象具有引用另一個(gè)對(duì)象的屬性搅窿,則該對(duì)象被視為可達(dá)性, 它引用的那些也是可以訪問(wèn)的疾棵,詳細(xì)的例子如下戈钢。
JavaScript 引擎中有一個(gè)后臺(tái)進(jìn)程稱為垃圾回收器,它監(jiān)視所有對(duì)象是尔,并刪除那些不可訪問(wèn)的對(duì)象。
一個(gè)簡(jiǎn)單的例子
下面是最簡(jiǎn)單的例子:
這里箭頭表示一個(gè)對(duì)象引用开仰。全局變量“user”引用對(duì)象?{name:“John”}?(為了簡(jiǎn)潔起見(jiàn)拟枚,我們將其命名為John)。John 的?“name”?屬性存儲(chǔ)一個(gè)基本類型众弓,因此它被繪制在對(duì)象中恩溅。
如果?user?的值被覆蓋,則引用丟失:
現(xiàn)在?John?變成不可達(dá)的狀態(tài)谓娃,沒(méi)有辦法訪問(wèn)它脚乡,沒(méi)有對(duì)它的引用。垃圾回收器將丟棄?John?數(shù)據(jù)并釋放內(nèi)存。
兩個(gè)引用
現(xiàn)在讓我們假設(shè)我們將引用從?user?復(fù)制到?admin:
現(xiàn)在如果我們做同樣的事情:
該對(duì)象仍然可以通過(guò)?admin?全局變量訪問(wèn)奶稠,所以它在內(nèi)存中俯艰。如果我們也覆蓋admin,那么它可以被釋放锌订。
相互關(guān)聯(lián)的對(duì)象
現(xiàn)在來(lái)看一個(gè)更復(fù)雜的例子竹握, family 對(duì)象:
函數(shù)?marry?通過(guò)給兩個(gè)對(duì)象彼此提供引用來(lái)“聯(lián)姻”它們,并返回一個(gè)包含兩個(gè)對(duì)象的新對(duì)象辆飘。
到目前為止啦辐,所有對(duì)象都是可訪問(wèn)的。
現(xiàn)在讓我們刪除兩個(gè)引用:
僅僅刪除這兩個(gè)引用中的一個(gè)是不夠的蜈项,因?yàn)樗袑?duì)象仍然是可訪問(wèn)的芹关。
但是如果我們把這兩個(gè)都刪除,那么我們可以看到?John?不再有傳入的引用:
輸出引用無(wú)關(guān)緊要紧卒。只有傳入的對(duì)象才能使對(duì)象可訪問(wèn)侥衬,因此,John?現(xiàn)在是不可訪問(wèn)的常侦,并將從內(nèi)存中刪除所有不可訪問(wèn)的數(shù)據(jù)浇冰。
無(wú)法訪問(wèn)的數(shù)據(jù)塊
有可能整個(gè)相互連接的對(duì)象變得不可訪問(wèn)并從內(nèi)存中刪除。
源對(duì)象與上面的相同聋亡。然后:
這個(gè)例子說(shuō)明了可達(dá)性的概念是多么重要肘习。
很明顯,John和Ann仍然鏈接在一起坡倔,都有傳入的引用漂佩。但這還不夠。
“family”對(duì)象已經(jīng)從根上斷開了鏈接罪塔,不再有對(duì)它的引用投蝉,因此下面的整個(gè)塊變得不可到達(dá),并將被刪除征堪。
內(nèi)部算法
基本的垃圾回收算法稱為“標(biāo)記-清除”瘩缆,定期執(zhí)行以下“垃圾回收”步驟:
垃圾回收器獲取根并“標(biāo)記”(記住)它們。
然后它訪問(wèn)并“標(biāo)記”所有來(lái)自它們的引用佃蚜。
然后它訪問(wèn)標(biāo)記的對(duì)象并標(biāo)記它們的引用庸娱。所有被訪問(wèn)的對(duì)象都被記住,以便以后不再訪問(wèn)同一個(gè)對(duì)象兩次谐算。
以此類推熟尉,直到有未訪問(wèn)的引用(可以從根訪問(wèn))為止。
除標(biāo)記的對(duì)象外洲脂,所有對(duì)象都被刪除斤儿。
例如,對(duì)象結(jié)構(gòu)如下:
我們可以清楚地看到右邊有一個(gè)“不可到達(dá)的塊”。現(xiàn)在讓我們看看“標(biāo)記并清除”垃圾回收器如何處理它往果。
現(xiàn)在進(jìn)程中不能訪問(wèn)的對(duì)象被認(rèn)為是不可訪問(wèn)的疆液,將被刪除:
這就是垃圾收集的工作原理。JavaScript引擎應(yīng)用了許多優(yōu)化棚放,使其運(yùn)行得更快枚粘,并且不影響執(zhí)行。
一些優(yōu)化:
分代回收——對(duì)象分為兩組:“新對(duì)象”和“舊對(duì)象”飘蚯。許多對(duì)象出現(xiàn)馍迄,完成它們的工作并迅速結(jié) ,它們很快就會(huì)被清理干凈局骤。那些活得足夠久的對(duì)象攀圈,會(huì)變“老”,并且很少接受檢查峦甩。
增量回收——如果有很多對(duì)象赘来,并且我們?cè)噲D一次遍歷并標(biāo)記整個(gè)對(duì)象集,那么可能會(huì)花費(fèi)一些時(shí)間凯傲,并在執(zhí)行中會(huì)有一定的延遲犬辰。因此,引擎試圖將垃圾回收分解為多個(gè)部分冰单。然后幌缝,各個(gè)部分分別執(zhí)行。這需要額外的標(biāo)記來(lái)跟蹤變化诫欠,這樣有很多微小的延遲涵卵,而不是很大的延遲。
空閑時(shí)間收集——垃圾回收器只在 CPU 空閑時(shí)運(yùn)行荒叼,以減少對(duì)執(zhí)行的可能影響轿偎。
面試怎么回答
1)問(wèn)什么是垃圾
一般來(lái)說(shuō)沒(méi)有被引用的對(duì)象就是垃圾,就是要被清除被廓, 有個(gè)例外如果幾個(gè)對(duì)象引用形成一個(gè)環(huán)坏晦,互相引用,但根訪問(wèn)不到它們嫁乘,這幾個(gè)對(duì)象也是垃圾英遭,也要被清除。
2)如何檢垃圾
一種算法是?標(biāo)記-清除?算法亦渗,另一種是引用計(jì)數(shù)(主要用在IE游覽器)
call()、apply()
apply方法能劫持另外一個(gè)對(duì)象的方法汁尺,繼承另外一個(gè)對(duì)象的屬性
Function.apply(obj,args)方法能接收兩個(gè)參數(shù)法精,第一個(gè)參數(shù)是在其中運(yùn)行函數(shù)的作用域,另一個(gè)是參數(shù)數(shù)組。其中搂蜓,第二個(gè)參數(shù)可以是數(shù)組狼荞,也可以是arguments對(duì)象
obj:這個(gè)對(duì)象將代替Function類里this對(duì)象
args:這個(gè)是數(shù)組,它將作為參數(shù)傳給Function(args–>arguments)
學(xué)生類里沒(méi)有給name和age屬性賦值啊帮碰,為什么又存在這兩個(gè)屬性的值呢相味,這個(gè)就是apply的神奇之處。
分析:Person.apply(this,arguments);
this:代表的是student殉挽,表示將Person中的this指向student丰涉。
arguments:是一個(gè)數(shù)組,在例子中表示[‘A','10','一年級(jí)']斯碌;
通俗一點(diǎn)講就是:用student去執(zhí)行Person這個(gè)類里面的內(nèi)容一死,在Person這個(gè)類里面存在this.name等之類的語(yǔ)句,這樣就講屬性創(chuàng)建到了student對(duì)象里面.
apply()和call()的作用是一樣的傻唾,他們的區(qū)別僅在于接收參數(shù)的方式不同投慈,call()需要把參數(shù)一個(gè)個(gè)列出來(lái)。
call()的用法
在Student函數(shù)里面可以將apply中修改成如下:
3.什么情況下用apply(),什么情況下用call()
至于是使用apply()還是call()冠骄,取決于采取那種給函數(shù)傳遞參數(shù)的方式最方便伪煤。
如果打算直接傳入arguments對(duì)象,或者是數(shù)組凛辣,并且參數(shù)列表相同則使用apply()抱既;否則,選擇call()可能更合適蟀给。
例:apply示例里面?zhèn)鬟f了參數(shù)arguments蝙砌,并且在調(diào)用Person的時(shí)候參數(shù)的列表是對(duì)應(yīng)一致的,也就是Person和Student的參數(shù)列表前兩位是一致的跋理,就可以采用apply择克。
如果我的Person的參數(shù)列表是這樣的(age,name)而Student的參數(shù)列表是(name,age,grade),這樣的就可以用call來(lái)實(shí)現(xiàn)了Person.call(this,age,name,grade);