javascript - 使用物件的方法,為什麼控制台結果裡,多了一個undifined?
習慣沉默
習慣沉默 2017-05-19 10:32:47
0
7
770

Q1為什麼控制台,最後輸出了兩個undifined?

#
var a = { b: { m: function() { console.log(this.p); }, p: 'Hello' } }; var hello = a.b.m; hello()

Q2感覺這裡也是多了一個undifined

//代码 var a = { b: { m: function() { console.log(this.p); }, p: 'Hello' } }; var hello = a.b; hello.m();

補充:
問題來源:
阮一峰的JS標準裡this關鍵字
上面程式碼就是連結裡,2.(3)物件的方法 最後一段

習慣沉默
習慣沉默

全部回覆 (7)
漂亮男人

自動自答,總結前人的幫助:

Q1
第一個undefined,因為hello指向了一個方法,可以看做functionName,所以this就是window
this.p; //window.p//先宣告一個window.p,未賦值,值是undifined

//先宣告一個window.p,未賦值,值是undifined

關鍵是多了一個undifined!//"test"第二個undefined,前面有個箭頭,
在m 函數裡加一個return 'test',
所以,這個箭頭可以看做return後面的值,這裡m函數沒有return,沒有回傳值就是undifined總結
:前面這個箭頭,是控制台獨有的,命令列調試時沒有

控制台先是執行函數,然後是,輸出函數的執行結果(比如再用來給別的賦值)


Q2this.p; //b.p

第一個undefined,因為hello指向了一個對象,可以看做b,所以
    小葫芦

    是最後一條語句的回傳值啦,你在 m 函數裡加上一個 return “test” 試試?

      黄舟

      個人覺得 第一個undefined是因為函數沒有回傳值,第二個undefined有可能是用瀏覽器調試的原因,你試試用命令列調試會不會出現第二個undefined。

        迷茫

        你用的是Chrome瀏覽器的控制台嗎?第二個undefined是本來就有的,跟你的程式碼無關。

        輸入var a = 1;

        按回車也有一個undefined。

          为情所困

          我覺得吧是你吧這個方法的this指針改變了你吧a對象裡的方法定義到了window下面一個變量裡這時候this指向了window 而window下並沒有p的定義你可以在var hello之前聲明一個var P就明白了

            黄舟

            1.hello()沒有回傳值
            2.console.log()這個函數沒有回傳值

              仅有的幸福

              多出來的undefined是js语句本身的值,剩下的就是this的問題了。

                最新下載
                更多>
                網站特效
                網站源碼
                網站素材
                前端模板
                關於我們 免責聲明 Sitemap
                PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!