Javascript 模块模式 - 所有模块都可以相互访问吗?
Javascript module pattern - Can all modules access eachother?
我已经用vanilla javascript和jquery做了相当多的工作。我现在正在尝试编写一个应用程序,该应用程序使用某种形式的闭包来私有化方法,以便所有内容都不仅仅存在于公共命名空间中。
我转向模块模式,因为它似乎是我问题的解决方案,但是我不能完全理解它。使用此模式将方法添加到主应用程序时,是否所有模块也可以使用其他模块中的所有方法?因为,情况似乎并非如此。
var MODULE = (function () {
var my = {},
privateVariable = 1;
function privateMethod() {
// ...
}
my.moduleProperty = 1;
my.moduleMethod = function () {
console.log("Method 1!");
};
my.anotherMethod(); //This doesn't work. anotherMethod() not defined
return my;
}());
var MODULETWO = (function (my) {
my.anotherMethod = function () {
console.log("Method 2!");
};
my.moduleMethod();
my.anotherMethod();
return my;
}(MODULETWO));
出于某种原因,我希望注释的方法有效。我们能做到这一点吗? 我设想有一个应用程序.js具有应用程序的肉质,以及其他具有实用程序功能来帮助该应用程序的单独js文件,但是在很多情况下,我设想这些实用程序类需要访问主应用程序的范围。 我似乎无法理解...
思潮?
与我交谈过的人向我指出了 Browserify.js,但我不知道这是否解决了我通过闭包无法访问所有内容的要求。 它似乎就像一个捆绑应用程序。
你的问题是你不遵守面向对象设计规则。这有各种各样的范式,更多的书籍、博客和视频,你可以在 10 辈子里消费。就我个人而言,我推荐 OOP 的 SOLID 原则。
更具体地说,您的模块应用作封装单元。模块应具有应通过其公共方法公开的单个逻辑责任。如果您需要访问其私有方法,则会遇到设计问题。
adhoc 模块模式提供了一种通过将值包含在函数中来创建隐私的方法,从而形成闭包。
可以这样想:
如果在函数中声明变量,则只能在该函数中访问该变量,除非您公开它。
没有暴露,_foo只是坐在那里等待垃圾收集
var foo = function() {
_foo = {name: 'joe', age: 42};
};
var myFoo = new foo();//this is undefined as we return nothing
公开,名称公开但年龄不公开,无法直接访问_foo。在下面的代码中,年龄是无用的,因为它无法到达。
var foo = function() {
_foo = {name: 'joe', age: 42};
var api = {
getName: function() {
return _foo.name;//api can return this because _foo is still in scope
}
};
var myFoo = new foo();//this is an object with one method, getName (it is the api returned from foo).
如果你创建另一个构造函数bar,它将无法与_foo交互,因为它被困在myFoo中。 bar 的 API 只能访问其中定义的变量,在本例中_bar。
var bar = function() {
_bar = {name: 'mike', age: 4};
var api = {
getName: function() {
return _foo.name;
},
getAge: function() {
return _bar.age
hasBirthday: function() {
_bar.age++;
return _bar.age;//bumps the age and returns the new age.
}
};
通知栏充分利用了私有数据,添加 setter 可能是个好主意。
此模式提供隐私,您如何构建应用程序的体系结构完全取决于您。
查看本书,了解基本的Javascript模式的综合示例:https://addyosmani.com/resources/essentialjsdesignpatterns/book/
- Javascript,访问一个主要对象模块模式中的每个对象
- 从模块内部访问Express装载路径
- 文件结构:使用索引.js文件级联访问子模块或子文件
- 如何访问npm模块抛出的自定义错误对象[error:[object object]]
- 访问模块.从外部文件导出
- JavaScript:访问继承子模块中的“封闭”变量
- j查询模块模式未命名 |如何访问“$”
- 从另一个模块访问作用域的指令
- 从带有木偶的子模块访问父模块的最佳方式
- 如何从解析模块访问全局变量
- 从Browserify模块访问DOM时出现问题
- 如何从子模块访问父方法
- 直接从Angular模块访问常量
- 揭示模块模式:在哪里为模块访问插入变量
- 如何从requirejs模块访问全局变量
- 从diff模块访问模块数据
- 未捕获的ReferenceError: $是未定义的错误,通过Node模块访问
- kendo要求从另一个模块访问视图模型
- 如何使用 node.js 将 JSON 对象从一个模块访问到另一个模块
- node.js:从另一个模块访问本地变量