作者cjcat2266 (CJ Cat)
看板Flash
標題Re: [問題] 關於AS3的Bound methods
時間Mon Feb 16 21:11:14 2009
※ 引述《cloudfly (堅持到底)》之銘言:
: 我的解讀是感覺跟flex裡的binding(繫結)很像(有錯請指正)
: flex裡用途就很淺顯易懂
這是完全不一樣的東西喔
這裡指的Bound method是說"跟一個物件綁在一起的method"
意思就是"宣告在一個class定義裡面的function"
相對於被稱為anonymous function或者function literal的函式
在Bound method裡面使用關鍵字this永遠指的是同一個物件
這麼說可能有點抽像
直接看一下以下這個例子可以讓你比較了解Bound function和functino literal的差別
(1)這是bound function
//class定義
package {
public class MyClass {
public var i:Number;
public var boo:Function;
public function foo():void {
trace(this.i);
}
}
}
其中foo()這個method是個bound method (宣告在class定義裡)
一個物件所擁有的function又稱為method
不管這個method是透過哪個變數得到參考
呼叫的時候,this永遠指的是擁有這個foo() method的物件
var obj1:MyClass = new MyClass();
var obj2:MyClass = new MyhClass();
obj1.i = 1;
obj2.i = 2;
obj2.boo = obj1.foo;
obj1.boo();
obj2.boo();
以上兩個boo()的呼叫都會trace出1的值
因為obj2的boo指到obj1的foo() method
而obj1的foo() method是個bound method
不管是透過哪個Function變數呼叫
裡面的this值永遠是它所屬的obj1物件
(2)這是function literal
如果承接上面的code繼續寫
obj1.boo =
function():void {
trace(this.i);
};
obj2.boo = obj1.boo;
obj1.boo();
obj2.boo();
結果會分別trace出1跟2的值
一個"匿名函式"(anonymouse function/function literal)
的參考被丟給了obj1的boo變數
然後又丟給了obj2的boo變數
因為這不是bound method
所以this關鍵字不是指到某個特定物件
而是要在這個函式被呼叫的時候才決定
一個匿名函式透過一個物件所擁有的Function變數來呼叫
那this關鍵字將會被解讀為這個物件
--
CJ Cat = Croa'J Cat = Cockroach Cat = 西街凱特 = 蜚蠊貓 = 蟑螂貓
Blog
http://cjcat.blogspot.com
Gallery
http://cjcat2266.deviantart.com
ptt2 Board CJWorkshop - 阿多比閃光(Adobe Flash)研討區
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.228.85.252
※ 編輯: cjcat2266 來自: 61.228.85.252 (02/16 21:12)
→ cloudfly:感謝cj大的分享..^__^ 02/16 23:07
推 liveinlow:又多學了一點! 02/17 10:58