作者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)
1F:→ cloudfly:感谢cj大的分享..^__^ 02/16 23:07
2F:推 liveinlow:又多学了一点! 02/17 10:58