看板 Ajax 關於我們 聯絡資訊
※ 引述《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)
CaptainH:js這部份真的很難搞 XD 03/22 13:05
coldollsheep:請問 可以知道綁在誰身上嗎? 03/22 13:38
coldollsheep:例如 String.xxx 或是 Math.ooo 這樣來叫用 03/22 13:38
coldollsheep:再次謝謝 解答我疑問 03/22 13:39
coldollsheep:我測了一下window.b 沒有work...我先忙一下公事@@ 03/22 13:42
coldollsheep:...先B(); 再window.b(); 就成功了 3Q 03/22 13:47
mrbigmouth:不懂你的問題 03/22 14:00
coldollsheep:已經了解了 ㄏ 沒事沒事~~感謝 03/22 17:58
coldollsheep:剛剛因為這件事情發生一個笑話 03/22 17:59
coldollsheep:開完會 (剛好是 js OOP的會 但是主講人是別人) 03/22 17:59
coldollsheep:開完會我說 "阿 今天javascript似乎進步了" 03/22 18:00
coldollsheep:我同事( 跟我一起測B()的人 )說 " 因為你有玩B喔? " 03/22 18:01
coldollsheep:...自己覺得還滿爆笑的 03/22 18:01