如何重载JavaScript对象的运算符相等性
我已经用Dojo.declare创建了新对象。如何重载对象的运算符==?您不能。JavaScript不支持运算符重载。您不能重载如何重载JavaScript对象的运算符相等性,javascript,dojo,Javascript,Dojo,我已经用Dojo.declare创建了新对象。如何重载对象的运算符==?您不能。JavaScript不支持运算符重载。您不能重载=,但是=有一个隐式的.toString()调用,所以无论.toString()返回什么,都将允许您有效地重载=(有点): 至于如何在Dojo中实现这一点,对不起,我不使用Dojo,但要点是您可以获得对所创建对象的引用,并添加thatObject.prototype.toString,如我的示例所示。您不能在Javascript/ECMAscript中使用。您可以从Ad
=
,但是=
有一个隐式的.toString()
调用,所以无论.toString()
返回什么,都将允许您有效地重载=
(有点):
至于如何在Dojo中实现这一点,对不起,我不使用Dojo,但要点是您可以获得对所创建对象的引用,并添加
thatObject.prototype.toString
,如我的示例所示。您不能在Javascript/ECMAscript中使用。您可以从Adobe中重载ExtendScript中的运算符。看见另请参见此(pro)或(contra)。这似乎仅适用于ActionScript。@Joachim Sauer:wtf?我就是这么回答的!添加一些链接以显示关于ECMAscript运算符重载的讨论。对于对象和原语,可能是这样。尽管valueOf
是您想要覆盖的内容。但不适用于两个对象<代码>新字符串('x')!=新字符串('x'),尽管两个对象的toString
方法返回相同的值。@Mike-meh。你说得对。对象相等性不适用,因为只有对内存地址的检查…即使是对象和原语比较,优先级也将被赋予valueOf
implementation。此处可能重复:
function foo(){}
foo.prototype.toString = function(){ return 42; }
var x = new foo();
x == 42; // true