我在ActionScript中最想念的一件事是缺少运算符重载,特别是==。我通过在我的类中添加“比较”方法来解决这个问题,但在许多情况下这没有用,例如当你想使用内置字典这样的东西时。
有解决此问题的好方法吗?
答案 0 :(得分:12)
不。
但是将equals
方法添加到您自己的类中并没有什么坏处。我尝试在比较对象时不要使用==
(对于===
也是如此,这对于对象来说是相同的)因为它只检查身份。
可悲的是,Flash和Flex中的所有集合都假定身份是衡量所需的唯一标准。
Flex中有一些提示,有人想要同时缓解这个问题,但似乎已经放弃了:有一个名为IUID的界面,它在 Flex开发人员指南中提到过,但不在任何地方使用。甚至连Flex中的集合都没有使用它来确定相等性。既然你要求提供Flash解决方案,那么无论如何它可能都没有帮助你。
我在我的博客上写了更多关于此内容(在Flex的上下文中):Is there no equality?。
答案 1 :(得分:4)
是的,它可以完成(但要小心,它的hacky):http://filimanjaro.com/2012/operators-overloading-in-as3-javascript-too-%E2%80%93-workaround/
在我写的关于+ =, - =运算符重载的教程中。但是也可以用==,如果不清楚,我可以写更多关于它的内容。
啊,这种方法有一些缺点(在极少数情况下甚至可能很危险)。在生产中使用它之前,请三思而后行。
修改强>
经过测试,看起来+ =, - =的技巧不适用于==运算符(有意义)。抱歉有误导性信息。