繁体   English   中英

AS3动态向现有对象添加功能

[英]AS3 adding a function to an existing object dynamically

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

为什么这样做:

s.WHEN.foo=5;

但这不是:

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

在运行这两行之后,我的s.WHEN对象只有foo:5并且缺少info: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对象?

如果你试试

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而不是匿名的Object / Function,它使工作变得轻松,并且调试将不会很麻烦。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM