1

是否可以以返回以下内容的方式构造对象:

baseObject.foo;   // return a string describing what foo does
baseObject.foo(); // execute the foo function

baseObject.bar;   // bar description
baseObject.bar(); // execute bar

更新:JavaScript 方法重载很接近,但不是我想要的。

Update2:jsfiddle(下面提供的解决方案)。

4

2 回答 2

6

您可以覆盖toString函数的默认方法:

baseObject.foo = function () { console.log('executing foo') }
baseObject.foo.toString = function () { return 'This function outputs "executing foo"'; }
于 2011-06-08T08:01:59.470 回答
4

baseObject.foo必须是一个函数,否则你将无法调用它。您唯一可以影响的是如何通过覆盖其toString()方法将此函数强制转换为字符串。默认toString()返回函数源代码,你可以让它返回别的东西。

baseObject.foo = function() {
    // Do something
}
baseObject.foo.toString = function() {
    return "Function does something";
}
alert(baseObject.foo);
于 2011-06-08T08:05:47.847 回答