突然回想起很久很久以前,跟同事解说过这几种操作符。它们很特别,都是由点组成,并且是递进式的:一点、两点、三点 以及 四点—— . 、.. 、… 、:: 。分别是如下几个“点操作符”:
一点(. ):
这个操作符大家都用得多了,用来访问类的属性或方法的,例如:Sprite. x、Sprite. addChile();
两点(.. ):
不多用 E4X 语法操作 XML 的人会对这个操作符陌生。两点(..)的这个操作符,用于访问 XML 或 XMLList 的后代元素。不管后代元素的层级有多深,你都可以方便获得指定的元素。拿语言参考上的一个例子看看:
var myXML:XML = <a>
<b>one
<c>
<b>two</b>
</c>
</b>
<b>three</b>
</a>;trace(myXML.. b[0].toXMLString());
trace(“______________”);
trace(myXML.. b[1].toXMLString());
trace(“______________”);
trace(myXML.. b[2].toXMLString());输出内容将如下所示:
<b>
one
<c>
<b>two</b>
</c>
</b>
______________
<b>two</b>
______________
<b>three</b>
你还可以与 @ 运算符一起使用来查找匹配的后代属性。玩法很多,这就是 E4X 了,详细请查阅语言参考。
三点(… ):
这是三个点的符号。指定函数将接受任意多个以逗号分隔的参数。具体用法:
function average(… args) : Number{
var sum:Number = 0;
for (var i:uint = 0; i < args.length; i++) {
sum += args[i];
}
return (sum / args.length);
}
四点(:: ):
整整齐齐的四点,非常漂亮:)这个操作符比较少用,在命名空间(namespace)相关领域上会用得比较多。例如在类的命名空间和 XML 命名空间。还是用例子来说明它的用法吧:
例一: 以下示例使用
::
运算符标识两个名称相同、但位于两个不同命名空间中的方法:public class NamespaceExample extends Sprite {
public namespace French;
public namespace Hawaiian;
public function NamespaceExample() {
trace(Hawaiian:: hello()); // aloha
trace(French:: hello()); // bonjour
}
Hawaiian function hello():String {
return "aloha";
}
French function hello():String {
return "bonjour";
}
}例二: 以下示例使用
::
运算符标识具有指定命名空间的 XML 属性:var soap:Namespace = new Namespace("http://schemas.xmlsoap.org/wsdl/soap/");
var w:Namespace = new Namespace("http://weather.example.org/forecast");
var myXML:XML =
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
<soap:Body>
<w:forecast xmlns:w="http://weather.example.org/forecast">
<w:city>Quito</w:city>
<w:country>Ecuador</w:country>
<date>2006-01-14</date>
</w:forecast>
</soap:Body>
</soap:Envelope>;
trace(myXML.soap:: Body.w:: forecast.w:: city); // Quito