代码
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.val
和boo.val
会产生这样的结果。我也会认为需要调用valueOf
才能使它对返回的值产生任何影响。
我在Mozilla开发者网络上查看了一些与valueOf()
有关的JavaScript文档(建议阅读此问题),但我仍然不明白这里发生了什么。 (旁注:我也不明白如何在没有括号的情况下调用函数...)
我正在寻找一个解释对象的一些基础机制/过程的答案,同时仍然可以被对象新手访问。谢谢!
答案 0 :(得分:3)
这很简单:" JavaScript调用valueOf方法将对象转换为原始值。" (more info)您正在定义valueOf()
,在操作中使用时,它被调用以提供对象的值。
接着说:
如果对象没有原始值,则valueOf返回该对象 本身,显示为:
[object Object]
答案 1 :(得分:0)
您为构造函数的原型提供了一个返回.valueOf()
属性的val
函数。该功能是+
运营商的操作所征求的。
当两个操作数都不是字符串时,内部调用内部" ToNumber"函数获取操作数值。反过来,如果对象值存在,它将尝试valueOf
函数。在你的情况下,确实如此。