你也可以写if (!dictionary[key]) ...
可以抵消的,而不是循环直通删除所有键的字典对象:dictionary = null;
我写了一个广播级的,你是绝对欢迎如果你愿意,可以使用它!它对非显示对象之间的全球通信非常有效。但是,如果您想允许显示对象之间进行全局通信,则可以通过舞台添加和派发自定义事件 - 当然,假设它们已添加到舞台上。
Broadcast.as
package com.mattie.events.broadcaster
{
//Class
public class Broadcast
{
//Variables
public var name:String;
public var data:Object;
//Constructor
public function Broadcast(name:String, data:Object)
{
this.name = name;
this.data = data;
}
}
}
Broadcaster.as
package com.mattie.events.broadcaster
{
//Imports
import flash.utils.Dictionary;
//Class
public final class Broadcaster
{
//Properties
private static var singleton:Broadcaster;
private var publicationsProperty:Dictionary;
private var subscriptionsProperty:Array;
//Constructor
public function Broadcaster()
{
if (singleton)
throw new Error("Broadcaster is a singleton that cannot be publically instantiated and is only accessible thru the \"broadcaster\" public property.");
publicationsProperty = new Dictionary(true);
subscriptionsProperty = new Array();
}
//Publish Data
public function publish(name:String, data:Object = null):void
{
publicationsProperty[name] = data;
for (var i:uint = 0; i < subscriptionsProperty.length; i++)
if (subscriptionsProperty[i].name == name)
{
var handler:Function = subscriptionsProperty[i].handler;
handler(new Broadcast(name, data));
}
}
//Subscribe Handler
public function subscribe(name:String, handler:Function):void
{
if (publicationsProperty[name])
handler(new Broadcast(name, publicationsProperty[name]));
for (var i:uint = 0; i < subscriptionsProperty.length; i++)
if (subscriptionsProperty[i].name == name && subscriptionsProperty[i].handler == handler)
return;
subscriptionsProperty.push({name: name, handler: handler});
}
//Unpublish Data
public function unpublish(name:String):void
{
delete publicationsProperty[name];
}
//Unsubscribe Handler
public function unsubscribe(name:String, handler:Function):void
{
for (var i:uint = 0; i < subscriptionsProperty.length; i++)
if (subscriptionsProperty[i].name == name && subscriptionsProperty[i].handler == handler)
{
subscriptionsProperty.splice(i, 1);
return;
}
}
//Publications Getter
public function get publications():Dictionary
{
return publicationsProperty;
}
//Subscriptions Getter
public function get subscriptions():Array
{
return subscriptionsProperty;
}
//Singleton Getter
public static function get broadcaster():Broadcaster
{
if (!singleton)
singleton = new Broadcaster();
return singleton;
}
}
}
对于N°1另外还有'in'操作:'如果(在字典中键)'我估计是最好看看。 – RIAstar