问题标签 [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 - 使用此关键字和显示模块模式的严格违规
无法让以下内容通过 jslint/jshint
我知道它是由this
在函数声明中使用引起的,但我读了 Crockford 写的一些东西,他说违规是为了防止全局变量污染 - 但这里唯一的全局变量是我明确定义的那个...... myModule
. 其他所有内容都保存在直接函数范围内,我应该可以this
用来引用模块。
有什么想法可以让这种模式通过吗?
更新:如果我使用函数表达式而不是声明,这似乎有效,即
不过,我不喜欢这种格式,更喜欢让函数名和命名参数更接近,并且声明看起来/感觉更干净。老实说,我不明白为什么会引发违规行为——这种模式没有理由这样做。
javascript - 使用 jQuery / 模块模式维护范围的问题
我刚刚开始使用模块模式(感谢 Christian Heilmann 的原始教程)来组织我的 jQuery,我遇到了一个奇怪的问题。考虑以下 javascript 代码:
以下 HTML 中包含和使用的内容:
我遇到的问题是单击#gallery1 上的缩略图正在交换#gallery2 的图像,但#gallery2 正在按预期工作。看起来 $obj 变量在实例之间共享,但我认为它的范围仍然是函数的私有实例。
任何有关如何正确确定范围和工作的建议都将不胜感激。
javascript - 如何通过模块模式制作子模块
我正在阅读有关 JavaScript 模块模式的信息。我的问题是如何用它制作子模块,即我如何从它继承,比如我有这个类
如何使用从父级继承的属性创建它的子类?我怎样才能对模块模式做同样的事情?
object - 编写一个 JavaScript 库
我想编写一个 JS 库并像这样处理它:
当然,c1 和 c2 不能共享相同的变量。我想我知道如何用对象做到这一点,它会是:
但问题是,如果我以这种方式编写,我就不能拥有多个 Class 实例。所以我试图用函数实现同样的效果,但我认为我做得不对。
我不知道它是否可能,但我接受其他方式来创建这个模块的建议。我不知道它是否也相关,但我在这个库中使用 jQuery。
javascript - 模块模式代码在运行时作为普通匿名函数加载
我正在使用 Javascript 模块模式,因为它提供了许多好处,并且我在运行时使用以下方法加载 JS 文件:
myFile.js 的第一行是 myModule.Loaded = {},我在父(调用)脚本上使用它来确保加载了 myFile.js。
这是 myFile.js 的前几行:
但发生的情况是,myModule.Loaded 值未定义,这给人的印象是文件尚未加载,即使在 Firefox Firebug 上,我可以在“脚本”选项卡中看到该文件已加载,但它会丢失模块定义和变成这样:
我的意思是,它变成了一组匿名函数,而不是保留模块模式。怎么了?
javascript - javascript 设计模式:如何创建子模块和访问父模块私有变量和函数
我有以下内容:
我想创建一个子模块并从我的父模块 mod.a 调用一个私有函数。在遵循模块模式的最佳实践的同时,我该如何做到这一点?
javascript - Javascript 模块模式事件和监听器
我正在实现模块模式,并且想知道定义和注册事件侦听器/处理程序的最佳/首选方式。以下工作,但也许有更好/更简单的方法......
试试看:
拥有 myEventx、myEventHandlerx 和 addListener 似乎需要做很多工作?
javascript - 避免丢失此参考以及它发生的原因
我有这个有错误的小提琴-> http://jsfiddle.net/Osoascam/AkZZr/6/ (这是没有错误的版本)--> http://jsfiddle.net/Osoascam/AkZZr/7 /
其中有一个模块(如主应用程序),一个Module.AjaxInterface
处理 Ajax 调用,一个Module.Modules.Inbox
(执行与电子邮件收件箱相关的任务),以及一个 Module.Pages.Gmail
处理多个模块以显示页面。所有这些都是使用模块模式完成的。
现在,您可以看到有很多回调。我想知道this
这些电话会发生什么...
我没有得到this
参考发生了什么以及如何保存它:
因此,对模块本身内部函数的调用是有效的……然后,它调用test.ajaxCalls
,而后者又调用pretendRender()
. 现在,在pretendRende
r 我有这个:
我的问题是......this
参考发生了什么?为什么会变成window
? 我该如何解决?我知道我可以使用call
or apply
,但是pretendRender
正在调用该函数AjaxInterface
,并且对 的引用Modules.Inbox
已经丢失(除非我使用caller
,我不能在 下"strict"
)。我知道我可以通过this
保留AjaxInterface
它,但我真正想要的是真正了解正在发生的事情并创建一个优雅的解决方案。
javascript - 额外间接级别的任何具体好处
请考虑底部的 Javascript 代码摘录。它大致由两个模块组成,一个用于处理消息。消息模块中的 filtersUpdateSuccess 方法有什么好处?
目前它只是委托给 tplPanels 模块的 overwriteAll 方法。一个让我印象深刻的想法是,在 filtersUpdateSuccess 方法中,对 tplPanels.overwriteAll 的调用可以包装在 try/catch 中。这对我有好处吗,额外的间接级别还有其他好处吗?
PS ....我熟悉以下问题,并已对其进行了咨询并按照其中的链接进行操作,但是现在我想要在特定上下文中得到答案,而不是更笼统的:间接级别解决了每个问题
javascript - 用 jQuery 显示模块模式不起作用
我一直在玩揭示模块模式。我最初开始使用单例模式,但通过阅读模块模式似乎是更好的选择。
所以我测试了以下内容:
这在调用时工作正常
但是,我想使用 jQuery,所以我尝试了:
但这不起作用。它在使用时确实有效:
调用它时如何在没有添加 jQuery 的情况下让它工作?