我喜欢暴露的模块模式。我将拥有一些我想公开并返回的私人函数。但我的揭示模块模式中也可能有一些“返回此”的本地函数......

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 转换为在正确的上下文中使用?感谢您的任何建议!我只是想把我的思想集中在整个“归还这个”的概念上。

有帮助吗?

解决方案

应该很好,因为“这个”是关于上下文的执行。因为您在一个公共功能上返回这一部是“剪切”对象的一部分,所以您只能获得剪切对象。所以,如果你考虑以下情景:

,我认为你想要做的事情应该没问题
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
.

其他提示

请先检查一下是什么 this 关键字是,有一个 MDN 上有很好的介绍.

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

是的当然。这是方法可链接性的默认模式 - 所有内容都返回调用它的对象。然而,要依靠这一点,你需要在任何情况下归还它,而不仅仅是在护盾关闭时。

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

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

在哪里定义该函数绝对不重要。

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

(我假设与“语境“你指的是 this 对象在这里)

你真的不能,价值 this 始终取决于函数的调用。当然,你可以 .bind() 函数给你的 player 对象或直接返回 player 代替 this.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top