AS3动态地向现有对象添加函数

时间:2013-12-29 10:41:39

标签: actionscript-3

var s={};
s.WHEN={}

为什么这样做:

s.WHEN.foo=5;

但这不是:

s.WHEN['info']=function(){trace('do something');}

在我运行这两行后,我的s.WHEN对象只有foo:5并且缺少信息:function

我使用此功能通过浏览器中的控制台查看flash ...

var console:Object={
    log:function(_){ExternalInterface.call("window.console.log",_);},
    dir:function(_){ExternalInterface.call("window.console.dir",_);}
    }

然后,如果我这样做(闪光灯):

console.log(s.WHEN);

我明白了:

Object
> foo: 5
> __proto__: Object

但如果我这样做:

console.log(s.WHEN['info']);

我明白了:

function

为什么它存在但不作为我的s.WHEN对象的一部分?

1 个答案:

答案 0 :(得分:0)

如果你尝试

trace( console.log );

您还会看到function因为您正在引用函数而不是函数调用。

所以使用:

console.log( s.WHEN() );

但是你什么也看不见(好吧,你会在Flash控制台中有一个跟踪),因为WHEN引用的函数什么都不返回。

s.WHEN[ 'info' ] = function(){ return 'do something' };
console.log( s.WHEN() ); // <-- Note the bracket after WHEN

它会起作用。

但正如Gio所说,你应该使用OOP而不是匿名的对象/函数,这样可以简化生活,调试也不会太痛苦。