Re: [問題] 關於AS3的Bound methods

看板Flash作者 (CJ Cat)時間15年前 (2009/02/16 21:11), 編輯推噓1(101)
留言2則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《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
感謝cj大的分享..^__^
02/16 23:07, 1F

02/17 10:58, , 2F
又多學了一點!
02/17 10:58, 2F
文章代碼(AID): #19cMNqyS (Flash)
文章代碼(AID): #19cMNqyS (Flash)