0

我喜欢揭示模块模式。我将有私人功能,我想公开并返回它们。但是我的显示模块模式中可能还有一些本地函数“返回这个”......

var player = function(){
//my local variable scope...

oplayer.damage = function(){
    if(!this.grace){
        this.shield--;
        if (this.shield == 0){
            return this;
        }
    }
};
      ...

      return {
      damage : oplayer.damage
      }
      }();

如果我明确返回某些东西,可以“返回这个”吗?(在使用显示模块模式的上下文中)。如果没有,我如何转换我的本地函数 oplayer.damage 以在适当的上下文中使用?感谢您的任何建议!我只是想围绕整个“归还这个”概念来思考。

4

2 回答 2

1

请先查看关键字是什么,在 MDNthis上有很好的介绍。

如果我明确返回某些东西,可以“返回这个”吗?

是的当然。这是方法可链接性的默认模式 - 一切都返回它被调用的对象。但是,要依赖它,您需要在每种情况下都将其退回,而不仅仅是在防护罩关闭时。

如果这不是您的目标,只需使用普通return;语句(结果undefined就像没有返回语句一样)。

在使用显示模块模式的上下文中

您在哪里定义该函数绝对无关紧要。

将我的函数转换为在适当的上下文中使用?

(我假设您使用“上下文”指的是this这里的对象)

你不能真的,值this总是取决于函数的调用。当然,您可以.bind()将函数应用于您的player对象,或者直接只返回player而不是this.

于 2012-10-02T14:03:40.583 回答
1

应该没问题,因为“this”与执行有关。因为您在作为“削减”对象的一部分的公共函数上返回 this,所以您只会得到被削减的对象。因此,如果您考虑以下情况,我认为您尝试做的事情应该没问题:

var test = function(){
   var pri = function(){
       console.log("Private");
   };

   var pub = function(){
       pri();
       console.log("pub");
       return this;
   }

   return {
       pub: pub
   };
}();

console.log(test.pri); //-> undefined
console.log(test.pub); //-> function(){…}
console.log(test.pub()); //-> "Private" "pub" [Object {…}]
console.log(test.pub().pri); //-> "Private" "pub" undefined
于 2012-10-02T14:06:02.580 回答