在Flex中使用JSON对象为属性赋值

JavaScript中,JSON的简洁和强大令人印象深刻。ActionScript3作为一种从JavaScript语言发展起来的语言,依然可以使用JSON

依然可以var  object={a:1,b:”b”,c:”1111”};这样的JSON形式创建ActionScript对象。

JavaScript中,我们常常在new 对象时,通过传入{……}这样的JSON数据方便地初始化对象。

ActionScript中,我们依然可以这样做。

 

package
{
    public   class ConstructTemplate
    {
        private var  thisA;
        private var  thisB;
        private var  thisC;
        /**
         * 使用JSON对象进行参数构造
         */
        public function ConstructTemplate(...args)
        {
            //TODO: implement function
            /**
             *
             * 我们把它的属性取出来,赋给this的各个同名属性。
             */
            for( var i:int=0;i<args.length;i++){
                this.initProperties(args[i]);
            }
        }
        
        /*
         可以在构造对象后为参数赋值。
         */
        public function initProperties(...args)
        {
            //TODO: implement function
            /**
             *
             * 我们把它的属性取出来,赋给this的各个同名属性。
             */
            
            for( var i:int=0;i<args.length;i++)
            {
                for(var name:String in args[i])
                {
                    this[name] =args[i][name];
                }
                
            }
        }
        public function set a(a){
            this.thisA=a;
        }
        
        public function get a(){
            return this.thisA;
        }
        
        public function set b(b){
            this.thisB=b;
        }
        public function get b(){
            return this.thisB;
        }
        public function set c(c){
            this.thisC=c;
        }
        public function get c(){
            return this.thisC;
        }
    }
}

 

使用代码:

var constructTemplate=  new ConstructTemplate({a:"a"},{a:100,b:"B"},{thisC:"thisC"});

现在在ActionScript3中使用JSON对象初始化属性有特殊的意义。

因为,ActionScript3不支持函数重载。而且在严格模式下,给方法传入参数时,数量和类型必须一致,否则编译不过。

因此,使用...args这样的技术就尤为重要。

ActionScript3中构造器只能有一个。使用上面这样的构造器无疑是最灵活的。

既然ActionScript3无法 重载函数,那么大量使用args模拟函数重载就是大有可为的。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。