我想知道在javascript中编写可重用代码的这种方法
I would like to know this approach of writing reusable code in javascript
我以前看过一个教程,在那个教程中,作者使用了以下方法来编写可重用的代码。我正试图找到那个教程,但还没有用。我想知道一些关于下面的方法,以及如何与new
操作符重用这一点,而不将模块添加到全局命名空间?
(function(factory) {
})(function() {
// All of the logic code was here in that tutorial.
});
我认为你应该看看模块模式,它旨在创建可重用的良好封装的javascript组件
这里有一个简短的例子
MyModule = function(){
var privateAttribute = 2;
return {
publicAttribute : "this is a public attribute";
publichMethod : function (param1){console.log(param1);}
}
}();
var module = MyModule;
module.putlicMethod("hello world");
所以,这个想法是第二个函数是你在第一个函数中作为factory
参数传递进来的,所以你会创建factory
的实例并在TOP函数中针对这些实例编写代码-而不是底部函数。最下面的函数是模块定义。
感谢@Bergi让我走上了正确的道路。
下面是一个示例代码:(function(factory) {
var constructor = new factory();
var obj1 = new constructor();
var obj2 = new constructor();
console.log("obj1: ", obj1);
console.log("obj2: ", obj2);
})(function() {
return function() {
return {
prop1: "123",
prop2: "ABC"
}
}
});
从代码示例中很难确切地知道您在寻找什么,但是代码看起来类似于用于定义可重用模块的通用模块定义模式(UMD),用于与各种模块加载器一起使用。
UMD的一个例子(取自本页),它说明了您在代码中描述的内容;在较低的函数中实际的代码逻辑(模块),它作为参数factory
传递给处理模块设置的上层函数:
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
// AMD
define(['jquery'], factory);
} else if (typeof exports === 'object') {
// Node, CommonJS-like
module.exports = factory(require('jquery'));
} else {
// Browser globals (root is window)
root.returnExports = factory(root.jQuery);
}
}(this, function ($) {
// methods
function myFunc(){};
// exposed public method
return myFunc;
}));
相关文章:
- 有没有一种方法可以通过只引用JavaScript来执行代码
- 从window.onbeforeunload调用方法背后的代码
- 是否有一种方法可以使用公共代码库在Java和JavaScript中进行输入验证
- 使用较少代码隐藏和显示选择菜单内容的更好方法是什么?javascript
- 我需要把createUser代码放在流星方法中吗
- 在 Javascript 中实现解耦代码/回调的正确方法是什么?
- 如何在jQuery.CSS()方法中为所有浏览器编写CSS代码
- 角度方法返回未绘制的代码
- 使用ScriptManager.RegisterStartupScript从代码隐藏调用javascript方法
- 崇高的jslint:任何忽略特定代码段的方法
- 有没有更好的方法来编写这个Show/hide JQuery代码
- 在我的代码中管理大量硬编码数据的最佳方法
- 需要减少用于获取日期格式的javascript方法代码
- 通过找到一种删除许多 if 语句的方法来简化代码
- 使用each()方法来动画化代码类型
- 我可以替换“;获取“;方法用“;POST”;代码库中的任何位置
- AngularJS控制器之间共享代码/方法/功能
- 如何确定字符串是否为代码方法
- 使用razor在javascript中调用带有参数的c#代码方法
- 如何从javascript调用服务器端类代码方法