Flash 板


LINE

※ 引述《yhn0tgb60 (呦厚厚)》之铭言: : 就是最近在建一个自己在使用的 library : 主要是希望 之後写程式可以方便一点 : 不过最近再思考一个问题 : 就是在 library 里面的 function 什麽时候会用 static ??? : 像 flash 内建的 library : 有些是要 new了後才能用 有些则是 static的 直接就可以用 : 想请问 通常怎麽的 function 会设计成需要 new ??? 如果是描述"个体"行为 的function 通常会作成 member function: class Human { ... } var man1 : Human = new Human(); var man2 : Human = new Human(); var woman1 : Human = new Human(); man1.walkAway(); man2.walkAway(); woman1.walkAway(); // 注: 三个个体(实体, instance) walk 到哪去, 基本上并不互相影响. : 而怎样的 function 会设计成 static ??? static function 通常提供的是"与该 class 相关" 的动作: Math.max(v1, v2, v3); // 注: 找出三个数中的最大值, 对"数学"并没有什麽影响. : 还有各自有怎样的优缺点 ??? : 谢谢了 ^^ (public) static function 跟一般 public (member) function 虽然乍看之下没什麽不同, 但它们其实在本质上就有着一个决定性的差异, 因此将它们相提并论, 比较优缺点会有点奇怪. 这个本质上的不同是什麽呢? 就是 static function 少了一个隐藏的参数: "this". 我们在呼叫 instance method, 也就是 public member function 时, 会需要先 new 出一个某 class 的 instance(实体), 如: var t : TextField = new TextField(); 再透过它呼叫某个函数, 如: t.addEventListener(Event.ADDED_TO_STAGE, addedHandler); 虽然这个特定的 TextField 物件 t, 并没有列在传入 function 的参数当中, 但它却一定会出现在 function name 的左边, 因此 flash player 的底层机制就可以知道 function body 中写到 "this" 时, 指的就是 t。 这也就是为什麽, 如果我们在实作 static function 误用了 "this" 这个关键字, 会看到这样的错误讯息: The "this" keyword cannot be used in static methods. 因为我们呼叫 static function 时, 左边写的只是 class 的名称而已: Math.max(v1, v2, v3); 所以说, 当 function 内部需要用到 "this" 这个关键字时, 就非宣告为 non-static 不行了. 看到这里应该有人会想说:咦?我好像一辈子都没用过什麽 "this" 啊? 这是因为 "this" 实在是太常用了, 所以时常可以省略不写. 但其实每当我们在 class 中宣告一个非 static 的东西, 而在 function 当中存取它的值的时候, 就不知不觉地用到了 "this": class SomeDummyClass { public var myInt : int = 8; public function getMyInt() : int { return myInt; // 等同於 return this.myInt; } } 简单地说就是如开头所言: 如果 function 内部所作的动作, 是需要针对"个体", 改变个体状态(属性)的, 通常就会作成 member function: 因为要改变 "这个个体" 的状态(属性), 需要透过 "this" 这个参数. 至於 static function, 可以想像成只是为常作的动作提供一个 namespace 所用的. 以上可能写得有点杂乱, 仅供概念上的参考, 如有错误还请不吝指正 :) 下面是一个简单的例子, 还是不太了解, 或者看了上面文章变得满头雾水的板友可以跑起来/改一改参考看看 XD; package { import flash.display.Sprite; public class StaticExample extends Sprite { public function StaticExample() { MyDummyClass.staticFunction(); var myDummy : MyDummyClass = new MyDummyClass(); myDummy.memberFunction(); //myDummy.staticFunction(); // 不是这样用滴. trace(myDummy.myInt); //trace(MyDummyClass.myInt) // 不是这样用滴. var myDummy2 : MyDummyClass = new MyDummyClass(); myDummy2.myInt += 10; trace(myDummy.myInt); // 不会被 myDummy2.myInt 影响: 不意外~ trace(myDummy2.myInt); } } } // end of package class MyDummyClass { public var myInt : int = 8; // public static var dummyInt : int = 0; // 试试看改这个? public static function staticFunction() : void { trace("in static function!"); //trace(myInt); // 找不到 myInt, 因为 static function 中没有"this". //trace(this.myInt); // 不能用 this. } public function memberFunction() : void { trace("in instance method!"); //myInt++; //this.myInt++; } } --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.45.9.249 ※ 编辑: Senkousha 来自: 114.45.9.249 (04/06 02:02)
1F:→ Senkousha:在本板搜寻"static", 有另外的好文 :) 04/06 02:04
2F:推 yhn0tgb60:好详细阿 太感谢你了 这篇该M 谢谢了 ^^ 04/06 02:04







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP