作者mrbigmouth (大嘴先生)
看板Ajax
标题Re: [问题] 练习javascript的时候 遇到困难了(物件)
时间Fri Mar 22 13:04:30 2013
※ 引述《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)
1F:→ CaptainH:js这部份真的很难搞 XD 03/22 13:05
2F:推 coldollsheep:请问 可以知道绑在谁身上吗? 03/22 13:38
3F:→ coldollsheep:例如 String.xxx 或是 Math.ooo 这样来叫用 03/22 13:38
4F:→ coldollsheep:再次谢谢 解答我疑问 03/22 13:39
5F:推 coldollsheep:我测了一下window.b 没有work...我先忙一下公事@@ 03/22 13:42
6F:推 coldollsheep:...先B(); 再window.b(); 就成功了 3Q 03/22 13:47
7F:→ mrbigmouth:不懂你的问题 03/22 14:00
8F:推 coldollsheep:已经了解了 ㄏ 没事没事~~感谢 03/22 17:58
9F:→ coldollsheep:刚刚因为这件事情发生一个笑话 03/22 17:59
10F:→ coldollsheep:开完会 (刚好是 js OOP的会 但是主讲人是别人) 03/22 17:59
11F:→ coldollsheep:开完会我说 "阿 今天javascript似乎进步了" 03/22 18:00
12F:→ coldollsheep:我同事( 跟我一起测B()的人 )说 " 因为你有玩B喔? " 03/22 18:01
13F:→ coldollsheep:...自己觉得还满爆笑的 03/22 18:01