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

时间:2015-04-10 21:07:33

标签: 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 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.valboo.val会产生这样的结果。我也会认为需要调用valueOf才能使它对返回的值产生任何影响。

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

我正在寻找一个解释对象的一些基础机制/过程的答案,同时仍然可以被对象新手访问。谢谢!

2 个答案:

答案 0 :(得分:3)

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

接着说:

  

如果对象没有原始值,则valueOf返回该对象   本身,显示为:

     

[object Object]

答案 1 :(得分:0)

您为构造函数的原型提供了一个返回.valueOf()属性的val函数。该功能是+运营商的操作所征求的。

当两个操作数都不是字符串时,内部调用内部" ToNumber"函数获取操作数值。反过来,如果对象值存在,它将尝试valueOf函数。在你的情况下,确实如此。