您好,登錄后才能下訂單哦!
本篇文章為大家展示了call和apply怎么在javascript中使用,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
1、js屬于一種解釋性腳本語言;2、在絕大多數瀏覽器的支持下,js可以在多種平臺下運行,擁有著跨平臺特性;3、js屬于一種弱類型腳本語言,對使用的數據類型未做出嚴格的要求,能夠進行類型轉換,簡單又容易上手;4、js語言安全性高,只能通過瀏覽器實現信息瀏覽或動態交互,從而有效地防止數據的丟失;5、基于對象的腳本語言,js不僅可以創建對象,也能使用現有的對象。
實踐一: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("直接執行"); } } function fn2(){ fn1(); }; fn2(); // fn2是是函數fn1的調用者
實踐六:callee 返回正被執行的 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(); // 輸出函數自身的字符串表達式
上述內容就是call和apply怎么在javascript中使用,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。