请考虑以下代码:
function test() { this.foo = function() { console.log('foo'); return; } this.bar = function() { console.log('bar'); return; } } var action = new test(); action.foo(); //prints 'foo'
上面的代码工作正常,以防我需要在动作测试中调用动作foo或bar.但是动作测试本身应该是一个可调用的函数.我认为如果JavaScript允许我创建这样的东西(见下文)会很酷,但正如预期的那样:
TypeError: action is not a function
function test() { this.foo = function() { console.log('foo'); return; } this.bar = function() { console.log('bar'); return; } return function() { console.log('default'); return; }(); } var action= new test(); action(); //prints 'default' action.bar(); //printf 'bar'
有可能实现类似的东西吗?
解决方法
有可能的.只需在里面创建一个函数并直接向函数对象添加其他属性:
function test() { var result = function () { console.log('default'); }; result.foo = function() { console.log('foo'); return; } result.bar = function() { console.log('bar'); return; } return result; } var test = new test(); test(); //prints 'default' test.bar(); //printf 'bar'