Re: [問題] 練習javascript的時候 遇到困難了(物件)

看板Ajax作者 (大嘴先生)時間12年前 (2013/03/22 13:04), 編輯推噓4(409)
留言13則, 3人參與, 最新討論串2/3 (看更多)
※ 引述《coldollsheep (加油加油^^)》之銘言: : 恩首先先貼一個很簡單的 class : B = function() : { : this.b = function() : { : console.log( 'B b' ) ; : } : } : var b = new B(); : b.b(); : 這是可以work的,結果是B b : 然後,陰錯陽差亂測試之下(反正我真的不懂),我測試了下面狀況 : B = function() : { : this.b = function() : { : console.log( 'B b' ) ; : } : } : B(); : b(); : 這段會成功執行讓我有點疑惑 : 到底那個this變成誰了? 為什麼可以執行b() : 我問了我朋友,我們測試了另外一段code 當一個函式不依附一個物件、不被bind、不被new的情況下被執行 裡面的this就會指到global物件 (如果是在瀏覽器裡執行的話,global物件就是window) 也就是說,B被執行之後,你會多一個廣域變數叫b b的內容會是console.log('B b') 因此你在之後直接執行b()是可以成功的 : B = function() : { : this.b = function() : { : console.log( 'inside b' ) ; : } : } : b = function() : { : console.log( 'outside b' ) ; : } : B(); : b(); : 結果是 inside b 因為當你把console.log('outside b')的function指派給廣域變數b後 B被執行了,再次把console.log('inside b')的funciton指派給this.b(同樣是廣域變數b) 因此b的內容被覆蓋 執行後的結果就是inside b : 還滿想知道怎麼回事的 : 懇請大大 隨口指點一下 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 1.34.206.30 ※ 編輯: mrbigmouth 來自: 1.34.206.30 (03/22 13:04)

03/22 13:05, , 1F
js這部份真的很難搞 XD
03/22 13:05, 1F

03/22 13:38, , 2F
請問 可以知道綁在誰身上嗎?
03/22 13:38, 2F

03/22 13:38, , 3F
例如 String.xxx 或是 Math.ooo 這樣來叫用
03/22 13:38, 3F

03/22 13:39, , 4F
再次謝謝 解答我疑問
03/22 13:39, 4F

03/22 13:42, , 5F
我測了一下window.b 沒有work...我先忙一下公事@@
03/22 13:42, 5F

03/22 13:47, , 6F
...先B(); 再window.b(); 就成功了 3Q
03/22 13:47, 6F

03/22 14:00, , 7F
不懂你的問題
03/22 14:00, 7F

03/22 17:58, , 8F
已經了解了 ㄏ 沒事沒事~~感謝
03/22 17:58, 8F

03/22 17:59, , 9F
剛剛因為這件事情發生一個笑話
03/22 17:59, 9F

03/22 17:59, , 10F
開完會 (剛好是 js OOP的會 但是主講人是別人)
03/22 17:59, 10F

03/22 18:00, , 11F
開完會我說 "阿 今天javascript似乎進步了"
03/22 18:00, 11F

03/22 18:01, , 12F
我同事( 跟我一起測B()的人 )說 " 因為你有玩B喔? "
03/22 18:01, 12F

03/22 18:01, , 13F
...自己覺得還滿爆笑的
03/22 18:01, 13F
文章代碼(AID): #1HI-PWRA (Ajax)
文章代碼(AID): #1HI-PWRA (Ajax)