【问题标题】:How to overload operator equality for JavaScript objects如何为 JavaScript 对象重载运算符相等性
【发布时间】:2011-04-11 08:39:09
【问题描述】:

我已经使用 Dojo.declare 创建了新对象。如何为对象重载运算符 == ?

【问题讨论】:

标签: javascript dojo


【解决方案1】:

你不能重载==,但== 有一个隐式的.toString() 调用,所以无论.toString() 返回什么都可以让你有效地重载==(有点):

function foo(){}
foo.prototype.toString = function(){ return 42; }

var x = new foo();
x == 42; // true

至于如何在 Dojo 中执行此操作,抱歉,我不使用 Dojo,但要点是您可以引用所创建的任何对象并添加 thatObject.prototype.toString,如我的示例所示。

【讨论】:

  • 对于一个对象和一个原语,也许。尽管valueOf 是您想要覆盖的。但不适用于两个对象。 new String('x') != new String('x') 尽管两个对象的 toString 方法返回相同的值。
  • @Mike - 嗯。你是对的。对象相等性不适用,因为只检查内存地址...
  • 即使是对象和原始比较,也会优先考虑valueOfimplementation。
【解决方案2】:

你不能。 JavaScript 不支持运算符重载。

【讨论】:

    【解决方案3】:

    你不能在 Javascript/ECMAscript 中。您可以在 Adob​​e 的 ExtendScript 中重载运算符。见this example。另请参阅此blog entry(专业版)或this(反对版)。

    【讨论】:

    • 这似乎只适用于 ActionScript。
    • @Joachim Sauer:wtf?这就是我说的这个答案!添加一些链接以显示有关 ECMAscript 的运算符重载的讨论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 2016-01-20
    • 2021-09-10
    • 2015-06-27
    相关资源
    最近更新 更多