问题标签 [revealing-module-pattern]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 揭示模块模式添加子模块和访问私有函数
我想使用显示模块模式设置一些代码。我想设置子模块以便能够访问主模块的私有功能,但我坚持如何做到这一点。
这是我一直在玩的一些示例代码:
我怎样才能做到这一点,以便我可以从 Utils 模块调用私有函数?
编辑:
Jsut 澄清我希望能够创建一个添加到主模块的子模块,所以如果它有助于子模块也可以是模块。我正在阅读:http ://www.sitepoint.com/modular-design-patterns-in-javascript/它使用 apply() 添加第二个模块,但必须使用扩展和私有化功能将模块添加到主要的。如果可能的话,我想远离它?
另一个编辑 简而言之,我希望将一个主模块和第二个模块放在一个仅用于一个部分的新文件中。我需要第二个模块仍然能够引用主模块的私有函数。这可能吗?
这是我提到的代码:
javascript - JS:揭示模块模式——访问内部对象与数组?
使用显示模块模式,我如何提供对非静态私有变量的直接访问?这是我所拥有的:
似乎 A 直接引用 arr,而 O 在初始化时满足于 obj 值的副本。如果 obj 是字符串、浮点数或布尔值,我会理解这种行为。
我当然可以通过公共 get_obj 方法公开 obj,但我仍然很好奇是否可以在没有其他帮助方法的情况下解决这个问题(我想保持与 obj 的接口完好无损)。此外,对象没有的数组有什么特别之处,会导致这种行为?
真的很感谢任何见解,
javascript - JS 揭示模块模式,我做错了什么
我一直在尝试利用显示模块模式,并认为我会为非 css3 自定义滚动条创建一个函数。
以上是模块。我正在设置这样的值:
但是,当我尝试对其进行测试时,我不断收到“未定义”和其他错误。在模块内部运行console.log(settings.wrapper)
返回undefined
. 我真的不知道我要去哪里错了,所以任何帮助将不胜感激。提前致谢
javascript - 用构造函数揭示模块模式
我在找出实现这一点的最佳方法时遇到了一些麻烦。
我想要一个具有构造函数的模块,该构造函数接受一个参数,该参数存储它以供以后在模块中使用。
在其他一些文件中
现在在上面someMethod
,moduleA 是未定义的,并且this
,是全局窗口对象。有人可以解释我如何访问moduleA吗?我不明白this.moduleA = moduleA;
构造函数之后会发生什么。我不是一个真正的 javascript 开发人员,所以如果我在这里使用了错误的模式或其他东西,请随时加入。
javascript - ajax 调用后从 Javascript 模块返回值
---已编辑---由于我的无知,这实际上与所有其他 AJAX 类型的问题相同......需要进入正确的心态。为了后代的缘故将它留在这里,也许可以帮助其他人在发布之前再看一下回调。
所以我想提前说,我认为这不是标准的“我如何从 ajax 调用返回值”问题,人们不等待异步调用完成。我认为这是对 Javascript 模块模式的变量范围误解,因此我们将不胜感激。
我正在关注这篇关于构建我的 ajax 调用的 SO 帖子,所以我在调用完成后使用延迟对象来处理我的数据。还有一些关于 Javascript 模块模式的教程,比如this和this。从外部模块内部的私有模块中返回值似乎相当简单——但是,我总是将 myObj.roots() 设为未定义。即使当我检查断点时它被定义为 X 值的数组。我错过了什么简单的事情——任何提示?谢谢!对不起一个简单的问题,我对 JS 模块模式完全陌生,并试图建立自己的库......
我的 JS 代码:
我的错误(来自 Chrome 的开发者工具控制台):
javascript - 你如何在 jQuery 的 document.ready 中使用显示模块模式?
我有以下(尽管)小的“揭示模块模式”实现代码:
我的印象是,通过使用window.CkSpace
我将能够全局访问 CkSpace 作为其任何公共成员的根命名空间。但是,当我将它与它结合使用时,$(document).ready()
除非CkSpace
我在$(document).ready()
.
有人可以在这里向我解释范围问题吗?是否有办法避免在我的$(document).ready()
函数中声明它?
编辑:我似乎有点健忘,当在范围内访问 CkSpace 时,我没有在$(document).ready()
javascript - 用 Angular 揭示模块模式
今天的代码让我再次发疯,尤其是 Angular 服务中带有显示模块模式的 Angular。当我开始时,我发现它没有任何问题......现在除了不工作......我不知道。任何方式都知道我想知道它是有角度的还是我在做一些愚蠢的事情。这是代码:
这就是它的名字:
这是 Firefox 给我手指的方式:
帮助?任何人??
这是一个如何使用 isready 函数的示例:
并像这样使用数据:
javascript - 在揭示模块模式中从模块函数显式访问模块 var
我有一个范围问题。我有以下实现显示模块模式的代码:
这导致对话“configData”。
但是,我希望函数 sayOhai 使用定义的 var 说“ohai”。假设我不想更改 sayOhai 的参数名称,我如何在 sayOhai 中访问 foo 的值?我试过alert (this.foo)
了,但那是未定义的。
同样,这是一个理论问题,所以改变sayOhai(foo)
不是我正在寻找的解决方案。var 的名称和方法的参数应该保持不变。那么,从 sayOhai 的范围来看,var foo 的完整限定名是什么?
提前致谢
javascript - Javascript Revealing Module Pattern - this 和内部函数调用
我最近一直在我的 Javascript 中使用Revealing Module 模式来帮助构建我的代码,并且一切都很顺利。但是,我对这段代码有点困惑:
当我直接调用pub()
and时pri()
,this
指的是vm
. 但是,当我pri()
从内部调用时pub()
突然this
又恢复到引用全局窗口对象。我认为揭示模块模式的目标之一是消除问题,this
但似乎当从另一个函数中调用一个函数时,我失去了this
.
有谁知道为什么会这样,如果有办法让它工作而不必传递对当前对象的引用?
javascript - 揭示模块模式 - 全局变量/初始化函数
我想最终摆脱我编写 JS 的非结构化方式,并且最近对“Revealing Module Pattern”大肆宣传。至少对我来说它似乎很有用,但我还没有找到我的一些问题的答案。因此,假设我们的 JS 中有一些不同的模块,在本例中是“site”和“nav”。“nav”模块中有一些私有函数,以后可能还有一些公共函数。在这些模块中调用 init 函数的最佳方法是什么。我想为它们创建一个公共函数,然后用MODULE.init()
; 调用它们。但对我来说,这似乎是一种不好的做法,而且我以前从未在任何地方看到过。
另一个问题,我在我红色的任何文章中都没有找到,是如何定义一个全局变量(如 body),我可能在我的任何模块中都需要它(向它添加一些类或其他东西)。所以假设我需要在“nav”和“site”模块中访问我的body
(就像在 jQuery中一样)。$("body")
这样做更好吗:
或将其放在 JS 文件的最顶部
或者有没有更好的方法来做到这一点/总体上改进我的代码?在此先感谢您的帮助。