javascript中call,apply,callee,caller用法實例分析
本文實例講述了javascript中call,apply,callee,caller用法。分享給大家供大家參考,具體如下:
實踐一:call,apply 用來讓一個對象去調用本不屬于自己的方法,兩者都可以傳遞參數,call的參數是列表形式,apply的參數是數組形式
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);
}
}
// 下面的示例是數組 arr 去調用person的say方法 , 這里call用來讓數組調用本不屬于它自己的方法
var arr = [1,2];
person.say.call(arr);
// call 還可以傳遞參數
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
實踐二:call,apply 用來修改this, 同樣引用上例的person對象
var program = {"name":"AlphaGo"}
person.sayName.call(program); // AlphaGo
person.sayName.apply(program); // AlphaGo
實踐三:call,apply把偽數組轉換為數組
// call,apply 把偽數組轉換為數組
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]
這里找到一篇詳細的 關于偽數組的文章
實踐四:單純的arguments對象
// 有關arguments
function count(a,b,c){
console.log(arguments.length);
if(count.length === arguments.length) {
console.log('實際參數與形參個數相同');
}else{
console.log('實際參數與形參個數不同');
}
}
count(1,2,3); // 實際參數與形參個數相同
count(1,2); // 實際參數與形參個數不同
/*
這里count.length 表示形參個數
arguments.length 表示實參個數
*/
實踐五:caller 用于查看,函數本身被哪個函數調用
function fn1(){
if(fn1.caller){
console.log(fn1.caller.name + " 是函數fn1的調用者");
}else{
console.log("直接執(zhí)行");
}
}
function fn2(){
fn1();
};
fn2(); // fn2是是函數fn1的調用者
實踐六:callee 返回正被執(zhí)行的 Function 對象,常用于匿名函數的遞歸與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 代指函數自身。
function test(){
console.log(arguments.callee);
}
test(); // 輸出函數自身的字符串表達式
感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運行工具:http://tools.jb51.net/code/HtmlJsRun測試上述代碼運行效果。
更多關于JavaScript相關內容可查看本站專題:《javascript面向對象入門教程》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結》
希望本文所述對大家JavaScript程序設計有所幫助。

