<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        JavaScript函數apply()和call()用法與異同分析

        來源:懂視網 責編:小采 時間:2020-11-27 22:10:21
        文檔

        JavaScript函數apply()和call()用法與異同分析

        JavaScript函數apply()和call()用法與異同分析:本文實例分析了JavaScript函數apply()和call()用法與異同。分享給大家供大家參考,具體如下: JavaScript的函數是對象,因此有屬性和方法。每個函數都包含兩個屬性:length和prototype,每個函數都包含兩個非繼承而來的方法:apply()和call()。
        推薦度:
        導讀JavaScript函數apply()和call()用法與異同分析:本文實例分析了JavaScript函數apply()和call()用法與異同。分享給大家供大家參考,具體如下: JavaScript的函數是對象,因此有屬性和方法。每個函數都包含兩個屬性:length和prototype,每個函數都包含兩個非繼承而來的方法:apply()和call()。

        本文實例分析了JavaScript函數apply()和call()用法與異同。分享給大家供大家參考,具體如下:

        JavaScript的函數是對象,因此有屬性和方法。每個函數都包含兩個屬性:length和prototype,每個函數都包含兩個非繼承而來的方法:apply()call()

        今天先來介紹一下前端面試中經常問到的apply()call()的區別吧!

        這兩個方法的作用是在函數調用時改變函數的執行上下文,也就是函數內的this,apply()方法接收兩個參數,一個是在其中運行函數的作用域,另一個可以是arguments對象,也可以是參數數組。

        call()方法與apply()方法的作用相同,它們的區別僅在于接收參數的方式不同,第一個參數不變,變化的是其余參數都直接傳遞給函數,也就是說,傳遞給函數的參數必須逐個列舉出來。

        JavaScript的參數在內部就是用一個數組來表示的,從這個意義上來說,apply比call的使用率更高,不必關心具體有多少個參數被傳入函數,只要用apply一股腦傳進去即可。若明確知道函數接收幾個參數,且想一目了然地表達形參與實參的對應關系,可以使用call。

        當使用call或apply時,若傳入的第一個參數是null,函數體內的this會指向默認的宿主對象,在瀏覽器中是window,但在嚴格模式下,函數體內的this還是為null。有時,使用call或apply的目的不在于指定this指向,而是另有用途,如借用其他對象的方法,則此時可以傳入null來替代某個具體的對象,如Math.max.apply(null, [1,5,2,4,3]]);

        下面來舉個例子:

        function sum(num1, num2) {
         return num1 + num2;
        }
        function applyFunc1(num1, num2) {
         return sum.apply(this, arguments);
        }
        function applyFunc2(num1, num2) {
         return sum.apply(this, [num1, num2]);
        }
        function callFunc(num1, num2) {
         return sum.call(this, num1, num2);
        }
        alert(applyFunc1(10, 20));//
        輸出:30 alert(applyFunc2(10, 20));//輸出:30 alert(callFunc(10, 20));//輸出:30

        JS中的函數其實是對象,函數名是對Function對象的引用。

        function add(a,b) {
         alert(a+b);
        }
        function sub(a,b) {
         alert(a-b);
        }
        add.call(sub,3,1); //
        輸出:30

        如果你認為apply()call()的作用在于傳遞參數,那就錯了,它們真正強大的地方在于能夠擴充函數賴以運行的作用域。

        call和apply的用途:

        (1)改變this的指向。

        call和apply最常見的用途是改變函數內部的this指向。如上述例子所示。

        (2)借用其他對象的方法。

        1)借用方法的第一種場景是借用其他對象的構造函數。

        var Student = function(name) {
         this.name = name;
        };
        var Teacher = function(name) {
         Student.apply(this,arguments);
        };
        Teacher.prototype.getName = function() {
         return this.name;
        };
        var teacher = new Teacher("Alice");
        console.log(teacher.getName()); // 
        輸出:Alice

        2)借用方法的第二種場景是借用其他對象的方法。

        當運行showColor.call(obj)時,函數的執行環境就進到了對象中。

        window.color = "white";
        var obj = {color: "black"};
        function showColor() {
         alert(this.color);
        }
        showColor();//
        輸出:"white" showColor.call(this);//輸出:"white" showColor.call(window);//輸出:"white" showColor.call(obj);//輸出:"black"

        不需要把showColor()函數放到對象obj中,再通過obj來調用。

        window.color = "white";
        var obj = {color : "black"};
        function showColor() {
         alert(this.color);
        }
        showColor();//
        輸出:"white" obj.showColor = showColor; obj.showColor();//輸出:"black"

        更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《javascript面向對象入門教程》、《JavaScript常用函數技巧匯總》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結》

        希望本文所述對大家JavaScript程序設計有所幫助。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        JavaScript函數apply()和call()用法與異同分析

        JavaScript函數apply()和call()用法與異同分析:本文實例分析了JavaScript函數apply()和call()用法與異同。分享給大家供大家參考,具體如下: JavaScript的函數是對象,因此有屬性和方法。每個函數都包含兩個屬性:length和prototype,每個函數都包含兩個非繼承而來的方法:apply()和call()。
        推薦度:
        標簽: 區別 用法 call
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 九一在线完整视频免费观看| 亚洲情A成黄在线观看动漫软件| 亚洲AV无码成人网站在线观看| 在线视频观看免费视频18| 亚洲理论片在线中文字幕| 亚洲视频在线免费看| 亚洲免费黄色网址| 成人无遮挡裸免费视频在线观看| 亚洲婷婷第一狠人综合精品| 国产精品成人无码免费| 美女羞羞喷液视频免费| 久久亚洲国产成人精品无码区| 99久久99这里只有免费的精品| 亚洲AV无码精品色午夜果冻不卡| 91青青青国产在观免费影视| 亚洲精品中文字幕无乱码| 9久9久女女免费精品视频在线观看| 亚洲国产成人久久综合| 亚洲免费一区二区| 免费不卡在线观看AV| 亚洲 日韩经典 中文字幕 | 99国产精品视频免费观看| 亚洲色偷偷偷网站色偷一区| AA免费观看的1000部电影| 国产99久久亚洲综合精品| 久久久久亚洲AV综合波多野结衣| 最近2019中文免费字幕在线观看| 麻豆亚洲av熟女国产一区二| 成人免费看黄20分钟| 国产视频精品免费视频| 久久久久亚洲AV成人片| 在线观着免费观看国产黄| 国产免费一级高清淫曰本片| 亚洲美女视频网址| 国产嫩草影院精品免费网址| 精品国产一区二区三区免费| 亚洲综合精品伊人久久| 国产偷窥女洗浴在线观看亚洲 | 国产亚洲精品影视在线产品| 中文字幕免费观看| 美女羞羞喷液视频免费|