如何在揭示模块模式中处理“返回此”的本地函数
-
12-12-2019 - |
题
我喜欢暴露的模块模式。我将拥有一些我想公开并返回的私人函数。但我的揭示模块模式中也可能有一些“返回此”的本地函数......
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
.
不隶属于 StackOverflow