基于索引结束的Javascript对象表现不同:foo与foo()

时间:2011-06-08 07:57:22

标签: javascript object javascript-objects

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

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

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

更新:JavaScript Method Overloading已接近,但不是我想要的。

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

2 个答案:

答案 0 :(得分:6)

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

baseObject.foo = function () { console.log('executing foo') }
baseObject.foo.toString = function () { return 'This function outputs "executing foo"'; }

答案 1 :(得分:4)

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

baseObject.foo = function() {
    // Do something
}
baseObject.foo.toString = function() {
    return "Function does something";
}
alert(baseObject.foo);