问题标签 [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 - 这个模块片段有什么问题?
我想在对象中有私有属性。以下代码不起作用:
似乎vars
类似于静态成员,而不是私有成员。
我是否必须编写this.dx = 1
以使变量可访问(例如在成员函数中)?它不会公开变量吗?
module-pattern - 创建一个模块的多个实例
我以为我开始很好地理解 JavaScript,但显然不是。让我用一个例子来解释我的问题。首先,我定义了以下模块:
然后我创建 2 个实例:
现在我更新计数器变量(因为它是公开的)并发出一些警报。到现在为止还挺好。
现在最后我说以下几点:
这是我不明白的一点。为什么这个警报 0?我以为第一个警报是 5,第二个是 10。
如果有人能解释上述内容如何工作或为我指明正确的方向,我将不胜感激。谢谢
javascript - 使用 javascript 模块模式的 jQuery 变量范围
在下面的代码中,我为 gobal 变量“myDiv”分配了一个 jQuery 元素。但是在“test()”函数内部,似乎 myDiv 变量已声明但未定义。在我可以对它做任何事情之前,我必须再次重新分配它 $('myDiv') 。
Bogus 变量 xyz 似乎可以正常访问...
javascript - 您可以将多个文件压缩为一个吗?
我将我的 JavaScript 代码拆分为几个文件,所有文件都使用模块模式(更新一个全局变量,比如 MyApp,使用新功能和成员。
是否可以将文件缩小为一个而不破坏范围
我想缩小的例子:
文件1.js
文件2.js
javascript - TGP deentityify 方法中引入的 Javascript 模块模式 - 为什么需要这种模式?
Crockford 在 deentityify 方法中引入了一种模式来创建模块。他声称:
模块模式利用函数范围和关闭来创建绑定和私有的关系。在这个例子中,只有 deentityify 方法可以访问实体数据结构。
蒸馏以删除他的自定义功能,我认为代码归结为...
问题是我不明白为什么这个额外的间接层是必要的。这段代码不等效吗?
module-pattern - 我可以使用带有 javascript 模块模式的类吗?
我有一堆“模块”,它们遵循这篇热门文章中描述的“JavaScript 模块模式”。据我了解,这些模块是将各种行为聚合到整洁的命名空间中的一种方式。
但是,如果我希望能够创建一个接受参数的唯一对象实例呢?就目前而言,我不能这样做,因为所有数据都是共享/静态的。我希望能够做到这一点:
我无法更改模式的结构,因为我们已经使用了一段时间,而且效果很好。我只想对其进行调整,以便可以将一些“类”放入其中,以处理非静态数据。
javascript - 同一命名空间中的多个“类”,但在不同的文件中
我有一个命名空间:Foo.Bar.Baz
在其中我有Qux
类。这些是使用显示模块模式定义的:
现在,在一个单独的文件中,我想将该Quux
类添加到这个命名空间。我怎么做?当我使用与上面相同的模式时,它会被忽略,因为我猜一个正在覆盖另一个。
javascript - 继承和模块模式
我正在尝试以这种方式使用模块模式实现继承:
但我不能从孩子的实例中调用test2()
.
我错了什么?
javascript - Javascript 模块模式 - 如何显示所有方法?
我有这样的模块模式:
这段代码让我只调用 methA ,methB()
这A
就是我想要的和我喜欢的。现在我遇到的问题 -我想至少以最小的努力对它进行单元测试而没有痛苦。
首先,我虽然可以简单地返回this
,但我错了。它返回window
对象。(有人可以解释为什么吗?)。
其次- 我在网上的某个地方找到了解决方案 - 将此方法包含在我的返回块中:
这个方法让我这样称呼方法:A.__exec('methA', arguments);
这几乎是我想要的,但很丑陋。我更喜欢A.test.methA()
wheretest
永远不会在生产代码中使用 - 只是为了揭示私有方法。
编辑 我看到人们告诉我要测试大的东西而不是小部分。让我解释。在我看来,API 应该只显示所需的方法,而不是一堆内部函数。由于它们的小尺寸和有限的功能,内部结构更容易测试,然后测试整个事物并猜测哪个部分出了问题。
虽然我可能错了,但我仍然想看看如何从对象本身返回对所有方法的引用:)。
javascript - jQuery + 模块模式:何时声明/查询元素?
- 通常,在
$(document).ready()
. - 在下面的两个选项中,Widget 在
$(document).ready()
. - 这个可以吗?我可以在准备好的处理程序之外初始化 jQuery 元素(只要我不操作任何东西)吗?
- 将整个 Widget 定义放在 里面会更好
$(document).ready()
吗? - 我应该等到
Widget.init()
查询元素吗? - 注意:我是 JS 设计模式的新手,所以如果我遗漏了什么,请注意
选项1
选项2