亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Javascript中函數(shù)分類&this指向的實(shí)例詳解

 更新時(shí)間:2021年05月16日 10:00:57   作者:qinzheng_chen  
其實(shí)想要徹底理解js中this的指向,不必硬背,這篇文章主要給大家介紹了關(guān)于Javascript中函數(shù)分類&this指向的相關(guān)資料,需要的朋友可以參考下

JS中定義函數(shù)的三種方式

通過實(shí)例來說明吧

<script>
        //method1
        function fn() {
            console.log('fn created ');
        }
        //method2
        var fn2 = function () {
            console.log('fn2 created');
        }
        //method3
        var fn3 = new Function('test', 'console.log(test);');
        fn3('fn3 test');
        console.dir(fn3);
        console.log(fn3 instanceof Object);
    </script>

運(yùn)行上面例子,證明了函數(shù)也是對(duì)象??梢圆捎胣ew + 構(gòu)造函數(shù)的方式創(chuàng)建實(shí)例,第三種方式執(zhí)行效率低。

函數(shù)的原型鏈

從結(jié)果可以看到Function原型對(duì)象的__proto__指向Object。

JS中函數(shù)的分類和調(diào)用方式

通過實(shí)例來說明吧

<script>
        //函數(shù)的分類和調(diào)用方式
        //方式1 普通標(biāo)準(zhǔn)函數(shù),this 指向window
        function fn() {
            console.log('fn1'+ this);
        }
        fn(); //本質(zhì)是window.fn(); 全局函數(shù)是window的成員       
        //方式2 對(duì)象的方法 this 指向調(diào)用者o
        var o = {
            sayHi: function () {
                console.log('fn2'+this);
            }
        }
        o.sayHi();

        //方式3 構(gòu)造函數(shù) this指向新創(chuàng)建的對(duì)象,這里指向star1
        function Star(username){
            this.username = username;
        }
        var star1 = new Star('ldh');

        //方式4 綁定事件函數(shù) this 指向函數(shù)的調(diào)用者 btn
        var fn = function (){
            console.log('btn 被點(diǎn)擊了'+ this);
        }
        btn.onclick = fn;
        //點(diǎn)擊了按鈕就可以調(diào)用函數(shù)

        //方式5 定時(shí)器函數(shù) 定時(shí)器實(shí)際是window成員 所以this 就是window
        setInterval(function(){},1000);
        //定時(shí)器按照設(shè)定的時(shí)間間隔去調(diào)用
        
        //方式6 立即執(zhí)行函數(shù) this 是window 同方式一

        (function(){console.log('function executed')})();
//不需要調(diào)用立即執(zhí)行      


    </script>

通過上面的例子,基本上歸納了筆者了解的函數(shù)使用方式。通過方式4和方式6的對(duì)比,

  • 我們可以知道函數(shù)后面加了() 表示立即調(diào)用,沒加(),表示函數(shù)的指針,只是指明函數(shù)不調(diào)用函數(shù)。
  • this 指向問題,牢記this指向調(diào)用者

改變this 指向的三個(gè)函數(shù)

this 指向是JS中很重要的問題,在上面的函數(shù)分類中,已經(jīng)有了系統(tǒng)的分析。下面重點(diǎn)總結(jié)改變this 指向的三個(gè)函數(shù)

call

把父類實(shí)例改成子類實(shí)例 實(shí)現(xiàn)屬性繼承

<script>
        //call function 
        function Father(username, age) {
            this.username = username;
            this.age = age;
        }

        function Son(username, age, gender) {
            Father.call(this, username, age);//實(shí)現(xiàn)繼承父類的屬性
            this.gender = gender;
        }
    </script>

apply

apply 和call 不同點(diǎn),參數(shù)是數(shù)組(偽數(shù)組)。在apply內(nèi)部會(huì)把數(shù)組拆成元素

主要使用 借助Math對(duì)象,Math.max.apply(Math, [4324, 45, 342, 23])

<script>
        //apply function 
        var o = {
            username: 'testuser'
        };
        function fn(arr) {
            console.log(arr);
            for (let i = 0; i < arr.length; i++) {
                console.log(arr[i]);

            }
            console.log(this);
        }

        fn.apply(o, [23, 43]);
        console.log(Math.max(43, 45, 243, 342));
        console.log(Math.max.apply(Math, [4324, 45, 342, 23])); 
    </script>

bind

只改變this 的指向 不調(diào)用函數(shù)

用途改變綁定事件的this,案例

<body>
    <button>click me</button>
    <button>click me</button>
    <button>click me</button>
    <script>
        //bind function
        //案例:實(shí)現(xiàn)多個(gè)按鈕發(fā)送驗(yàn)證碼后 3s 可以再次發(fā)送
        var btns = document.querySelectorAll('button');
        for (let i = 0; i < btns.length; i++) {
            btns[i].onclick = function () {
                this.disabled = true;
                setTimeout(function () {
                    this.disabled = false;//改變this 指向btn ,3000ms 后執(zhí)行
                }.bind(this), 3000);
            }
        }        
    </script>
</body>

總結(jié)

到此這篇關(guān)于Javascript中函數(shù)分類&this指向的文章就介紹到這了,更多相關(guān)JS函數(shù)分類this指向內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • KnockoutJS 3.X API 第四章之表單submit、enable、disable綁定

    KnockoutJS 3.X API 第四章之表單submit、enable、disable綁定

    Knockout是一個(gè)以數(shù)據(jù)模型(data model)為基礎(chǔ)的能夠幫助你創(chuàng)建富文本,響應(yīng)顯示和編輯用戶界面的JavaScript類庫。這篇文章介紹了KnockoutJS 3.X API 第四章之表單submit、enable、disable綁定的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2016-10-10
  • 微信小程序使用wx.request請求服務(wù)器json數(shù)據(jù)并渲染到頁面操作示例

    微信小程序使用wx.request請求服務(wù)器json數(shù)據(jù)并渲染到頁面操作示例

    這篇文章主要介紹了微信小程序使用wx.request請求服務(wù)器json數(shù)據(jù)并渲染到頁面操作,結(jié)合實(shí)例形式分析了微信小程序使用wx.request發(fā)送網(wǎng)絡(luò)請求及返回結(jié)果渲染到wxml界面相關(guān)操作技巧,需要的朋友可以參考下
    2019-03-03
  • 淺談js二維碼掃碼登錄是什么原理

    淺談js二維碼掃碼登錄是什么原理

    這篇文章主要介紹了淺談js二維碼掃碼登錄是什么原理,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • javascript 動(dòng)態(tài)創(chuàng)建表格

    javascript 動(dòng)態(tài)創(chuàng)建表格

    這篇文章主要介紹了javascript 動(dòng)態(tài)創(chuàng)建表格,需要的朋友可以參考下
    2015-01-01
  • js簡單的分頁器插件代碼實(shí)例

    js簡單的分頁器插件代碼實(shí)例

    這篇文章主要介紹了js簡單的分頁器插件代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 怎么判斷js腳本加載完成

    怎么判斷js腳本加載完成

    本篇文章主要是對(duì)判斷js腳本加載完成的方法進(jìn)行了介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2014-02-02
  • 打字效果動(dòng)畫的4種實(shí)現(xiàn)方法(超簡單)

    打字效果動(dòng)畫的4種實(shí)現(xiàn)方法(超簡單)

    下面小編就為大家?guī)硪黄蜃中Ч麆?dòng)畫的4種實(shí)現(xiàn)方法(超簡單)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • JavaScript滑移效果代碼

    JavaScript滑移效果代碼

    這里說的滑移其實(shí)就是減速效果,能根據(jù)設(shè)定的坐標(biāo)平面移動(dòng)。
    2008-09-09
  • JavaScript 閉包機(jī)制詳解及實(shí)例代碼

    JavaScript 閉包機(jī)制詳解及實(shí)例代碼

    這篇文章主要介紹了JavaScript 閉包機(jī)制詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • 淺析Javascript中“==”與“===”的區(qū)別

    淺析Javascript中“==”與“===”的區(qū)別

    這篇文章主要介紹了淺析Javascript中“==”與“===”的區(qū)別,非常的全面,這里推薦給小伙伴們
    2014-12-12

最新評(píng)論