作者scars (scars)
看板Flash
标题Re: [问题] this
时间Fri May 20 03:02:14 2011
※ 引述《boyen3 (Mentirosa!!)》之铭言:
: 最近开始研究AS3 正在看EAS3
: 看了很久还是对this这个关键字没什麽概念...
: 不知道有没有看错 书上说应该要尽量避免使用this
: 只有在function的参数跟function里的变数名称一样
: 可能会造成错误才用this
: 但是书又说应该避免参数跟变数使用同样名称
: 感觉this只是让写程式的人不用记变数一直this就好...
: 我这样有理解错吗?
: 还是this有其他的用途?
物件导向跟scope的问题
例如一个class Ball
他有一个property
color
还有一个method setColor
假设这样写
public function setColor(
color:uint):void{
color=
color
}
我想让这个 Ball 的 property
color 等於我传进去的 param
color
但这段code肯定没办法得到正确的结果
因为里面两个 color 都是指向传入的参数 color
这种情况就要使用 this.color = color
为什麽书上说要避免把变数跟参数用同一个名字
原因之一应该是因为容易混淆
那如果我就是取到同一个名字怎麽办
还可以用 this 让你有办法指向class member
又或者我需要用运算取得这个 class member 的名字
例如常见的 this["img"+i]
利用回圈可以取得这个物件的 img1 img2 img3 等等
我个人觉得 this 其实不是什麽会让人混淆的东西
只是因为有太多人连this是什麽意思都不知道就开始使用this
你的this放在什麽物件里面,
this 就是指向那个物件本身
this.color 就是指向这个物件的 color
不会是 function 传入的 param 或 local variable
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.216.2.251
1F:推 boyen3:我懂了 谢S大! 所以说如果不怕麻烦 this算是可有可无罗? 05/20 03:31
2F:推 ericinttu:to 楼上: 为什麽要讨厌this? 或拒绝用它呢? 05/20 05:09
3F:推 boyen3:我只是看完书 对书里面写得有点疑问... 没有拒绝用this啦 05/20 05:39
4F:→ boyen3:不然我也不用在这边问啦... 05/20 05:40
5F:→ aquarianboy:this就是"这里",就跟你讲话一样,如果你讲的话别人能 05/20 07:36
6F:→ aquarianboy:很清楚的知道你是在讲"哪里",那就不需要特别讲"这里" 05/20 07:37
7F:→ aquarianboy:至於"这里"是哪里? 那要看你站在哪里才知道这里是哪里 05/20 07:38
8F:→ aquarianboy:你站在一楼说"这里",那"这里"就是一楼 05/20 07:38
9F:→ aquarianboy:搞得好像绕口令.. :) 05/20 07:39
10F:推 etrexetrex:指定一个东西 有绝对位置和相对位置 像是资料夹 05/20 09:51
11F:→ etrexetrex:this 就像是资料夹或网页的 ./ 一样 05/20 09:53
12F:推 ericinttu:不用this的话, 所有会用到this情况, 都要把this改成那个 05/20 10:08
13F:→ ericinttu:主词. 多少个object会用到这个method, 就要写多少份 05/20 10:09
14F:→ ericinttu:这个method (但只是把里面的this替换成 John/Mary/... 05/20 10:10
15F:→ ericinttu:这样,为了用浅显易懂的程式,反而让程式不容易维护与修改 05/20 10:12
16F:→ ericinttu:.而且,有些情况是没办法预期有谁会用到这个method. 05/20 10:13
17F:推 peacedove:我觉得那本书想指的应该是 好的命名规则可以避免掉不必 05/20 14:09
18F:→ peacedove:要的this 不过还是看情况啦 05/20 14:09
19F:推 etrexetrex:我觉得coding时this不要省略 程式码会更好读 05/20 17:38
20F:推 boyen3:恩恩 我有比较清楚一点了 感谢各位! 05/21 03:34
21F:推 emily114005:这篇可以m了,想当初一直猜不透this是什麽 05/29 00:41