从自动调用JavaScript函数返回值?

时间:2014-01-11 23:48:44

标签: javascript function syntax

我有类似的设置:

this.engine = function()
{
    // Select engine...
    return justTheRightEngine;
}

// Later somewhere in the implementation...
this.engine().doSomeWork();

我很乐意在engine之后删除括号,所以我尝试将其分配给自动调用函数:

this.engine = (function()
{
    // Select engine...
    return justTheRightEngine;
})();

// Later somewhere in the implementation...
this.engine.doSomeWork();

但是自动调用函数不会返回任何值(而是实际返回Window对象)。我可以在自动调用功能旁边使用任何语法/ hack吗?

3 个答案:

答案 0 :(得分:1)

是的,这是可能的。在最近的浏览器中(FF> = 2.0,Chrome> = 1,IE> = 9,Opera> = 9.5,Safari> = 3),这将有效:

Object.defineProperty(this, 'engine', {get : function(){ 
    //Select engine ...
    return justTheRightEngine;
}});

我们正在添加 getter属性

然后你可以这样称呼它:

this.engine.doSomeWork();

完全按照你的意愿。

更多信息:JavaScript Get Operator

答案 1 :(得分:0)

该函数的不同之处在于它不再被称为对象的方法,而是作为独立函数,因此this将引用window对象而不是对象。使用call method将其称为对象的方法:

this.engine = (function()
{
    // Select engine...
    return justTheRightEngine;
}).call(this);

答案 2 :(得分:0)

只是为了完整,一个简单的

if (something_tells_me_this_engine_is_right())
    this.engine = justTheRightEngine;
在大多数情况下,

可能会成功,并且让人们坚持使用IE8 / XP来欣赏这个节目。

除非您在每次通话之前确实需要确保自上次调用引擎以来某人没有将您的FireFox隐蔽地转换为Opera浏览器。

(以狂躁的笑声退出场景)