这道javascript题该如何解?
发布于 10 年前 作者 think2011 4089 次浏览 最后一次编辑是 8 年前 来自 分享

题目

var foo = new Foo(2);     // foo.val = 2;
var boo = new Foo(3);    // boo.val = 3;

foo + boo // => 结果必须是 5

解决方案模板

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

var foo = function(value) { this.val = value; this.toString = function() { return this.val; } }; try it……

@hainee

http://www.jb51.net/article/46753.htm 找到一篇关于运算转换的。 那么用valueOf应该更好。

@hainee

最好是覆盖valueOf,而不是toString

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

// 测试
var foo = new Foo(2);
var bar = new Foo(3);

console.log(foo + bar);

楼上的是正道,但我有个变态 var Foo = function(val){return val == 2 ? [] : [5]}

@wuliao49 为何是返回数组?返回 0 和 5 不是更直观吗

@alsotang 用new的话,直接返回 0 和 5是拿不到的,数组可以。

改变constructor的返回值不是个好方法,虽然目的看起来达到了。。

var Foo = function(value) {
  this.val = value;
  return new Number(value);
}
回到顶部