返回对象属性在JavaScript中是如何工作的?

返回对象属性在JavaScript中是如何工作的?,javascript,object,return-value,Javascript,Object,Return Value,代码 var Foo = function(value) { this.val = value; } var foo = new Foo(2); var boo = new Foo(3); return foo+boo; 返回[object object][object]。这对我来说很有意义,因为它们是对象。但此代码的修订版本返回5: var Foo = function(value) { this.val = value; } Foo.prototype.valueOf = fu

代码

var Foo = function(value) {
  this.val = value;
}

var foo = new Foo(2);
var boo = new Foo(3);
return foo+boo;
返回
[object object][object]
。这对我来说很有意义,因为它们是对象。但此代码的修订版本返回
5

var Foo = function(value) {
  this.val = value;
}

Foo.prototype.valueOf = function() {
  return this.val;
}

var foo = new Foo(2);
var boo = new Foo(3);
return foo+boo;
为什么??我原以为要产生这样的结果需要
foo.val
boo.val
。我还认为需要调用
valueOf
,以便对返回值产生任何影响

我在Mozilla开发者网络上看过一些关于
valueOf()
的JavaScript文档(针对这个问题建议阅读),但我仍然不明白这里发生了什么。(旁注:我也不明白在没有括号的情况下如何调用函数…)


我正在寻找一个答案,解释一些基本的力学/过程的对象,同时仍然可以访问的人谁是新的对象。谢谢

您为构造函数的原型提供了一个
.valueOf()
函数,该函数返回
val
属性。该函数是由
+
运算符的操作参考的

当两个操作数都不是字符串时,内部调用内部“ToNumber”函数以获取操作数值。然后,如果存在对象值,则将对其尝试
valueOf
函数。在您的例子中,确实如此。

这很简单:“JavaScript调用valueOf方法将对象转换为原始值。”()您正在定义
valueOf()
,在操作中使用它为对象提供值

它接着说:

如果对象没有基元值,valueOf将返回该对象 本身,显示为:

[对象]


在第二个实例中,您正在重新定义
valueOf()
返回的内容。默认情况下,在对象上,
valueOf()
返回
[object object]
。您还可以重新定义
toString()
,以便在合并成字符串时获得其他有趣的结果。@PatrickGunderson因此,为了澄清这一点,修正案重新定义了方法
object.valueOf()
,即每个对象都已具有正确的?@QueenCode。
+
可以调用
valueOf
toString
或两者。首先调用哪一个取决于对象的类型。