javascript中call,apply,callee,caller用法實(shí)例分析
本文實(shí)例講述了javascript中call,apply,callee,caller用法。分享給大家供大家參考,具體如下:
實(shí)踐一:call,apply 用來(lái)讓一個(gè)對(duì)象去調(diào)用本不屬于自己的方法,兩者都可以傳遞參數(shù),call的參數(shù)是列表形式,apply的參數(shù)是數(shù)組形式
var person = {
"name":"Tom",
"say":function(){
console.log("person say");
},
"count":function(x,y,z){
console.log('x= ' + x + ', y= ' + y + ', z= ' + z);
},
"sayName":function(){
console.log(this.name);
}
}
// 下面的示例是數(shù)組 arr 去調(diào)用person的say方法 , 這里call用來(lái)讓數(shù)組調(diào)用本不屬于它自己的方法
var arr = [1,2];
person.say.call(arr);
// call 還可以傳遞參數(shù)
person.count.call(arr,1,2,3); // x= 1, y= 2, z= 3
// apply 還可以這樣
person.count.apply(arr,[1,2,3]); // x= 1, y= 2, z= 3
實(shí)踐二:call,apply 用來(lái)修改this, 同樣引用上例的person對(duì)象
var program = {"name":"AlphaGo"}
person.sayName.call(program); // AlphaGo
person.sayName.apply(program); // AlphaGo
實(shí)踐三:call,apply把偽數(shù)組轉(zhuǎn)換為數(shù)組
// call,apply 把偽數(shù)組轉(zhuǎn)換為數(shù)組
var wArr = {0:"hello",1:"world","length":2};
var arr1 = Array.prototype.slice.call(wArr);
var arr2 = Array.prototype.slice.apply(wArr);
console.log(arr1); // [hello,world]
console.log(arr2); // [hello,world]
這里找到一篇詳細(xì)的 關(guān)于偽數(shù)組的文章
實(shí)踐四:單純的arguments對(duì)象
// 有關(guān)arguments
function count(a,b,c){
console.log(arguments.length);
if(count.length === arguments.length) {
console.log('實(shí)際參數(shù)與形參個(gè)數(shù)相同');
}else{
console.log('實(shí)際參數(shù)與形參個(gè)數(shù)不同');
}
}
count(1,2,3); // 實(shí)際參數(shù)與形參個(gè)數(shù)相同
count(1,2); // 實(shí)際參數(shù)與形參個(gè)數(shù)不同
/*
這里count.length 表示形參個(gè)數(shù)
arguments.length 表示實(shí)參個(gè)數(shù)
*/
實(shí)踐五:caller 用于查看,函數(shù)本身被哪個(gè)函數(shù)調(diào)用
function fn1(){
if(fn1.caller){
console.log(fn1.caller.name + " 是函數(shù)fn1的調(diào)用者");
}else{
console.log("直接執(zhí)行");
}
}
function fn2(){
fn1();
};
fn2(); // fn2是是函數(shù)fn1的調(diào)用者
實(shí)踐六:callee 返回正被執(zhí)行的 Function 對(duì)象,常用于匿名函數(shù)的遞歸與arguments一起配合使用。
var sum = function(n){
if(n>0) {
return n + arguments.callee(n-1);
}
return 0;
};
var total = sum(10);
console.log(total); // 55
// arguments.callee 代指函數(shù)自身。
function test(){
console.log(arguments.callee);
}
test(); // 輸出函數(shù)自身的字符串表達(dá)式
感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運(yùn)行工具:http://tools.jb51.net/code/HtmlJsRun測(cè)試上述代碼運(yùn)行效果。
更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
- 原生js如何實(shí)現(xiàn)call,apply以及bind
- javascript中call,apply,bind的區(qū)別詳解
- Javascript call及apply應(yīng)用場(chǎng)景及實(shí)例
- JS call()及apply()方法使用實(shí)例匯總
- JS apply用法總結(jié)和使用場(chǎng)景實(shí)例分析
- JavaScript中的this/call/apply/bind的使用及區(qū)別
- JavaScript函數(shù)Call、Apply原理實(shí)例解析
- JS中call()和apply()的功能及用法實(shí)例分析
- JS中apply()的應(yīng)用實(shí)例分析
- 分析ES5和ES6的apply區(qū)別
相關(guān)文章
js動(dòng)態(tài)實(shí)現(xiàn)表格添加和刪除操作
這篇文章主要為大家詳細(xì)介紹了js動(dòng)態(tài)實(shí)現(xiàn)表格添加和刪除操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04
js實(shí)現(xiàn)精確到秒的日期選擇器完整實(shí)例
這篇文章主要介紹了js實(shí)現(xiàn)精確到秒的日期選擇器,以完整實(shí)例形式分析了JavaScript日期選擇器的實(shí)現(xiàn)步驟與相關(guān)技巧,涉及JavaScript針對(duì)時(shí)間與日期的相關(guān)運(yùn)算,需要的朋友可以參考下2016-04-04
JavaScript的Set數(shù)據(jù)結(jié)構(gòu)詳解
這篇文章主要為大家介紹了JavaScript的Set數(shù)據(jù)結(jié)構(gòu),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2022-01-01
JS正則表達(dá)式替換字符串replace()方法實(shí)例代碼
正則表達(dá)式是用于匹配字符串中字符組合的模式,在js中正則表達(dá)式是對(duì)象,這篇文章主要給大家介紹了關(guān)于JS正則表達(dá)式替換字符串replace()方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07

