Actionscript 3 AS3向现有对象动态添加函数
为什么这样做有效:Actionscript 3 AS3向现有对象动态添加函数,actionscript-3,Actionscript 3,为什么这样做有效: var s={}; s.WHEN={} 但这并不是: s.WHEN.foo=5; ? 运行这两行之后,我的s.WHEN对象只有foo:5,并且缺少info:function 我使用此功能通过浏览器中的控制台从flash查看 s.WHEN['info']=function(){trace('do something');} 然后,如果我这样做(在flash中): 我明白了: console.log(s.WHEN); console.log(s.WHEN['info'])
var s={};
s.WHEN={}
但这并不是:
s.WHEN.foo=5;
?
运行这两行之后,我的s.WHEN对象只有foo:5,并且缺少info:function
我使用此功能通过浏览器中的控制台从flash查看
s.WHEN['info']=function(){trace('do something');}
然后,如果我这样做(在flash中):
我明白了:
console.log(s.WHEN);
console.log(s.WHEN['info']);
但如果我这样做:
Object
> foo: 5
> __proto__: Object
我明白了:
console.log(s.WHEN);
console.log(s.WHEN['info']);
为什么它在那里而不是作为我的s.WHEN对象的一部分???如果您尝试
function
您还将看到function
,因为您引用的是函数而不是函数调用
因此,请使用:
trace( console.log );
但是您将什么也看不到(在Flash控制台中会有一个跟踪),因为WHEN引用的函数不返回任何内容
console.log( s.WHEN() );
s.WHEN['info']=function(){return'do something'};
console.log(s.WHEN());//对于我来说,跟踪function(){}
yes,但它不是我对象的一部分。请参见上文^这与您的问题没有直接关系,但请对ActionScript3和OOP进行一些研究。AS3虽然非常类似,但不是Javascript,所以请尝试使用类,您会发现自己花更少的时间调试此类语句,花更多的时间处理实际逻辑,对吗?那么,我要创建一个新的对象类吗?具有功能的人??这不是一个对象所做的吗?从技术上讲,你不是在创建一个类,而是在创建一个对象的实例,并将你的函数附加到这个类上。您还创建了匿名函数,而不是定义的函数。虽然Actionscript-3支持匿名,但建议使用已定义的函数,除非出于必要的原因,我不只是使用info函数进行跟踪。我还尝试在s.WHEN中放置其他方法,因此调用s.WHEN()似乎有点迟钝,因为它应该是s.WHEN['info'](),因为我以后可能也会使用s.WHEN['other']