成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

理解學(xué)習(xí)this指向問題

dendoink / 3473人閱讀

摘要:否則報(bào)錯(cuò)在嚴(yán)格模式下,對(duì)象的函數(shù)中的指向調(diào)用函數(shù)的對(duì)象實(shí)例同樣道理,可以推斷出,在嚴(yán)格模式下,構(gòu)造函數(shù)中的指向構(gòu)造函數(shù)創(chuàng)建的對(duì)象實(shí)例。

要點(diǎn)

this的指向在函數(shù)定義的時(shí)候是確定不了的,只有函數(shù)執(zhí)行的時(shí)候才能確定this到底指向誰,實(shí)際上this的最終指向的是那個(gè)調(diào)用它的對(duì)象。

this指向的三種情況

情況1:如果一個(gè)函數(shù)中有this,但是它沒有被上一級(jí)的對(duì)象所調(diào)用,那么this指向的就是window,這里需要說明的是在js的嚴(yán)格版中this指向的不是window,而是指向調(diào)用函數(shù)的對(duì)象實(shí)例,這種函數(shù)中的this等于undefined。

function a(){
        var user = "維他奶";
        console.log(this);//window
        console.log(this.user);//undefined
    }
    //windonw是全局對(duì)象,所有的全局變量都是對(duì)象的屬性.
    //a()<=>window.a()
    a();
    console.log(window);
    console.log(window.user);//根本沒有user這個(gè)屬性。只有一個(gè)name="";

運(yùn)行結(jié)果

嚴(yán)格模式,請(qǐng)參照https://segmentfault.com/a/11...
嚴(yán)格模式下定義變量必須使用var。否則報(bào)錯(cuò).
在嚴(yán)格模式下,對(duì)象的函數(shù)中的this指向調(diào)用函數(shù)的對(duì)象實(shí)例
同樣道理,可以推斷出,在嚴(yán)格模式下,構(gòu)造函數(shù)中的this指向構(gòu)造函數(shù)創(chuàng)建的對(duì)象實(shí)例。

"use strict";//開啟嚴(yán)格模式
    function a(){
        var user = "維他奶";
        //在嚴(yán)格模式下,對(duì)象的函數(shù)中的this指向調(diào)用函數(shù)的對(duì)象實(shí)例
        console.log(this);//a{}
        console.log(this.user);//undefined
    }
    var A = new a(); 

運(yùn)行結(jié)果

情況2:如果一個(gè)函數(shù)中有this,這個(gè)函數(shù)有被上一級(jí)的對(duì)象所調(diào)用,那么this指向的就是上一級(jí)的對(duì)象。

var sum = {
        a:10,
        b:{
            a:12,
            fn:function(){
                console.log(this.a);//12
            }
        }
    }
    sum.b.fn();

運(yùn)行結(jié)果

情況3:如果一個(gè)函數(shù)中有this,盡管這個(gè)函數(shù)是被最外層的對(duì)象所調(diào)用,this指向的也只是它上一級(jí)的對(duì)象.

var sum = {
        a:10,
        b:{
            // a:12,
            fn:function(){
                console.log(this.a);//undefined
            }
        }
    }
    sum.b.fn();

運(yùn)行結(jié)果

注意事項(xiàng)
盡管對(duì)象b中沒有屬性a,這個(gè)this指向的也是對(duì)象b,因?yàn)閠his只會(huì)指向它的上一級(jí)對(duì)象,不管這個(gè)對(duì)象中有沒有this要的東西。

情況4:this永遠(yuǎn)指向的是最后調(diào)用它的對(duì)象,也就是看它執(zhí)行的時(shí)候是誰調(diào)用的,情況4中雖然函數(shù)fn是被對(duì)象b所引用,但是在將fn賦值給變量num的時(shí)候并沒有執(zhí)行所以最終指向的是window,這和情況3是不一樣的,情況3是直接執(zhí)行了fn。

var sum = {
        a1:10,
        b:{
            a:12,
            fn:function(){
                console.log(this.a1);//undefined
                console.log(this);//window
            }
        }
    }
    var num = sum.b.fn;
    num();

運(yùn)行結(jié)果

構(gòu)造函數(shù)的this指向:
function A(){
        this.name = "維他奶";
    }
    var a = new A();
    console.log(a.name);//維他奶

運(yùn)行結(jié)果

new關(guān)鍵字到底做了什么?
(1) 創(chuàng)建一個(gè)新對(duì)象;
(2) 將構(gòu)造函數(shù)的作用域賦給新對(duì)象(因此 this 就指向了這個(gè)新對(duì)象);原理:自動(dòng)調(diào)用apply方法,將this指向這個(gè)空對(duì)象,這樣的話函數(shù)內(nèi)部的this就會(huì)被這個(gè)空的對(duì)象替代。
(3) 執(zhí)行構(gòu)造函數(shù)中的代碼(為這個(gè)新對(duì)象添加屬性);
(4) 返回新對(duì)象。

return 會(huì)把new創(chuàng)建的this覆蓋.
如果返回值是復(fù)雜數(shù)據(jù)類型,那么this指向的就是那個(gè)返回的對(duì)象,如果返回值不是復(fù)雜數(shù)據(jù)類型那么this還是指向函數(shù)的實(shí)例。

    function A(){
        this.name = "維他奶";
        return 1;
    }
    var a = new A();
    console.log(a.name);//維他奶

    function A(){
        this.name = "維他奶";
        return ;
    }
    var a = new A();
    console.log(a.name);//維他奶

    function A(){
        this.name = "維他奶";
        return function(){};
    }
    var a = new A();
    //傳入空函數(shù),所以輸出一個(gè)空,而不是undefined
    console.log(a.name);//""

    function A(){
        this.name = "維他奶";
        return null;
    }
    var a = new A();
    console.log(a.name);//維他奶

簡(jiǎn)單數(shù)據(jù)類型:string,boolean,number,undefined,null,NaN
復(fù)雜數(shù)據(jù)類型: Object,Function,Array,String,Boolean,Number
其中String,Boolean,Number,是自帶的封裝好的方法。
簡(jiǎn)單數(shù)據(jù)類型存放在內(nèi)存的棧中,而復(fù)雜數(shù)據(jù)類型存放在內(nèi)存的堆中,把地址存放在內(nèi)存的棧中,先獲取地址,再讀取堆中數(shù)據(jù)。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/107847.html

相關(guān)文章

  • javascript this學(xué)習(xí)總結(jié)

    摘要:例如通過,調(diào)用時(shí)強(qiáng)制把它的綁定到上。箭頭函數(shù)問題箭頭函數(shù)體內(nèi)的對(duì)象就是定義時(shí)所在的對(duì)象,而不是使用時(shí)所在的對(duì)象,固定不變。 剛?cè)腴Tjavascript,關(guān)于this的學(xué)習(xí),花了自己挺多的時(shí)間,做了比較多的功課,看了一篇又一篇的文章,也看了一些書籍,今天就結(jié)合看的那些東西總結(jié)下自己所學(xué)到的東西,方便留著以后回看,進(jìn)一步的學(xué)習(xí),這篇文章會(huì)不斷的更新,不斷的更新自己的想法,現(xiàn)在還是一個(gè)入門不...

    A Loity 評(píng)論0 收藏0
  • 學(xué)習(xí)JavaScript之this,call,apply

    摘要:在全局對(duì)象中調(diào)用,自然讀取的是全局對(duì)象的值構(gòu)造器調(diào)用說明作為構(gòu)造器調(diào)用時(shí),指向返回的這個(gè)對(duì)象。最直觀的表現(xiàn)就是,去看一些優(yōu)秀框架的源代碼時(shí),不再是被繞的暈乎乎的。 學(xué)習(xí)起因: 在之前的JavaScript學(xué)習(xí)中,this,call,apply總是讓我感到迷惑,但是他們的運(yùn)用又非常的廣泛。遂專門花了一天,來弄懂JavaScript的this,call,apply。中途參考的書籍也很多,以...

    wenhai.he 評(píng)論0 收藏0
  • 我對(duì)JavaScript中this的一些理解

    摘要:匿名函數(shù)的執(zhí)行環(huán)境具有全局性,因此它的對(duì)象通常指向。如果對(duì)此有疑惑,可以看知乎上的答案知乎匿名函數(shù)的指向?yàn)槭裁词亲鳛閷?duì)象方法的調(diào)用,指向該對(duì)象當(dāng)函數(shù)作為某個(gè)對(duì)象的方法調(diào)用時(shí),就指這個(gè)函數(shù)所在的對(duì)象。 因?yàn)槿粘9ぷ髦薪?jīng)常使用到this,而且在JavaScript中this的指向問題也很容易讓人混淆一部分知識(shí)。 這段時(shí)間翻閱了一些書籍也查閱了網(wǎng)上一些資料然后結(jié)合自己的經(jīng)驗(yàn),為了能讓自...

    focusj 評(píng)論0 收藏0
  • JS 中的this指向

    摘要:當(dāng)碰到時(shí)呵呵再看一個(gè)呵呵再來呵呵呵呵呵呵呵呵什么意思呢如果返回值是一個(gè)對(duì)象,那么指向的是構(gòu)造函數(shù)的實(shí)例但是并沒有被返回,如果返回值不是一個(gè)對(duì)象那么還是指向構(gòu)造函數(shù)創(chuàng)建的實(shí)例。 為什么要學(xué)習(xí)this?如果你學(xué)過面向?qū)ο缶幊蹋悄憧隙ㄖ栏墒裁从玫?,如果你沒有學(xué)過,那么暫時(shí)可以不用看這篇文章,當(dāng)然如果你有興趣也可以看看,畢竟這是js中必須要掌握的東西。 1. this指向調(diào)用他的對(duì)象 首先...

    KavenFan 評(píng)論0 收藏0
  • 再談JavaScript面向?qū)ο笏枷爰袄^承

    摘要:面向?qū)ο笾杏腥筇卣?,封裝,繼承,多態(tài)。這不僅無法做到數(shù)據(jù)共享,也是極大的資源浪費(fèi),那么引入對(duì)象實(shí)例對(duì)象的屬性指向其構(gòu)造函數(shù),這樣看起來實(shí)例對(duì)象好像繼承了對(duì)象一樣。實(shí)例對(duì)象的原型指向其構(gòu)造函數(shù)的對(duì)象構(gòu)造器的指向。 前言 為什么說是再談呢,網(wǎng)上講解這個(gè)的博客的很多,我開始學(xué)習(xí)也是看過,敲過就沒了,自以為理解了就結(jié)束了,書到用時(shí)方恨少啊。實(shí)際開發(fā)中一用就打磕巴,于是在重新學(xué)習(xí)了之后分享出來...

    svtter 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

dendoink

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<