Re: [問題] 關於AS3的Bound methods
※ 引述《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)
→
02/16 23:07, , 1F
02/16 23:07, 1F
推
02/17 10:58, , 2F
02/17 10:58, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):