我一直在看ActionScript 3中名称空间的使用,老实说,我看不出为什么需要它们。有没有人有他们使用的令人信服的例子?
我也发现它们很难实现。
答案 0 :(得分:3)
这是对命名空间的一个很好的说明:http://gskinner.com/blog/archives/2010/01/a_complete_guid.html
我避免在我自己的代码中使用它们...但有时我需要在使用框架类时使用它们。例如,ObjectProxy
使用它们。
对我来说,它们似乎是一种语言的怪癖......而且它们似乎习惯于绕过语言的局限性。 (见下面的评论)
答案 1 :(得分:0)
我正在研究这个命名空间功能的用法。
我偶然发现了另一个链接,其中包含更全面的解释以及maashaack项目中的一些示例用法:https://code.google.com/p/maashaack/wiki/Namespace
给出的一个例子是覆盖访问修饰符。转载如下:
package test
{
public class ClassA
{
public function ClassA()
{
}
public function test( msg:String ):void
{
trace( msg );
}
protected function trace( msg:String ):void
{
public::trace( "[ " + msg + " ]" );
}
}
}
答案 2 :(得分:0)
这更多是关于性能和名称组织。命名空间包含保存值的名称(类似于对象键,但不是真正的键);一个合格的名称就像引用ns::name
或一个对象(我猜不是AS3标准):ns[name]
或ns.name
。命名空间名称是通过在(ns defn
)上放置定义来定义的。像ns::id
这样的合格名称可以通过AS3编译器轻松优化(如果它是Adobe的字节码编译器,很可能......),主要是ns
不是任何表达式但是一般来说,直接引用命名空间定义。例如,在编译时,根据具体情况,ns::id
可以仅作为对ns::id
定义值的引用进行扩展,否则仅展开id
,如果不是Identifier
除Identifier
以外的表达式可以扩展到比Namespace
更快的速度,就像一个字节一样,否则表达式可能不会被优化。命名空间的一般用法在编译时是可观察的 - 如果它们的用法没有变形,因为命名空间也有自己的namespace Iterator;
Iterator class IteratorStopClass
{...};
Iterator function getValues()
{...};
对象并且可以表达。
const Iterator = {};
class IteratorStopClass
{...}
Iterator.IteratorStopClass = IteratorStopClass;
Iterator.getValues = function getValues()
{...};
请注意,名称空间等对象可以根据它们的使用方式进行优化,如果它们在编译时可以观察到,但任何编译器都不太可能这样做。
$('html, body').animate({
scrollTop: $("#target-element").offset().top
}, 1000);