为什么我要在AS3中使用名称空间?

时间:2011-05-02 01:57:17

标签: actionscript-3 namespaces

我一直在看ActionScript 3中名称空间的使用,老实说,我看不出为什么需要它们。有没有人有他们使用的令人信服的例子?

我也发现它们很难实现。

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,如果不是IdentifierIdentifier以外的表达式可以扩展到比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);