requirejs定义的模块返回的永远是单例对象,可以借助javascript中的类解决模块间的相互干扰问题
来源:互联网 发布:生态监测网络建设方案 编辑:程序博客网 时间:2024/05/21 09:11
RequireJS中定义一个模块,总的来说有2种方式:简单键值对和函数依赖式。
1.简单键值对:一个模块仅含有值对,没有任何依赖
define({ color: "black", size: 1, method1: function() {}, method2: function() {}});
这种写法虽然简单,但是有很大的局限性,仅仅是定义了该模块的返回值,不能做一些额外的初始化工作。
通过下面下面这种方式来定义模块,灵活性更高,我们可以在函数体内写一些模块初始化的代码。
define(function () { //Do initial work here return { method1: function() {}, method2: function() {} };});
在模块的所有依赖加载完毕后,回调函数会被调用来定义该模块。
define(["module1"], function(moudle1) { function calc(){return moudle1.val;}return {"get":calc}; });
这2种定义模块的方式是等价的,requirejs能够保证一个模块只会被加载一次,所以如果A、B模块都依赖于C模块,那么其实A和B模块使用的都是同一个对象。
//C模块define([],function(){ var count = 0;function sayCount(){count++;return count;}return {"say":sayCount};}); // A模块require(['C'], function(module) { cosole.log(module.say());//1}); // B模块require(['C'], function(module) {cosole.log(module.say());//2});
//C模块define([],function(){ // 定义一个类 function DemoClass() {var count = 0;this.say = function(){count++;return count;}; } return function(){//每次都返回一个新对象return new DemoClass(); };}); // A模块require(['C'], function(module) { cosole.log(module().say());//1}); // B模块require(['C'], function(module) {cosole.log(module().say());//1});
每次调用模块C,返回都是一个新的对象,通过这种方式能够避免A和B模块在使用模块C时候的干扰和冲突。
0 0
- requirejs定义的模块返回的永远是单例对象,可以借助javascript中的类解决模块间的相互干扰问题
- RequireJS 2.x —— 模块的相互引用
- requireJs使用初探及模块定义define函数的用法
- linux模块间的相互调用问题
- JS中的模块规范 seajs和requireJS的异同
- 如何解决类的相互包含,实现模块的独立
- Requirejs高级应用(二):消除requirejs的缓存模块
- javaScript 的AMD及define模块定义
- javaScript 的AMD及define模块定义
- requirejs:模块加载(require)及定义(define)时的路径小结
- requirejs:模块加载(require)及定义(define)时的路径小结
- python中的模块,包,库的定义
- 接口模块的定义
- Python模块的定义
- 模块中存在多重定义的问题
- Apache - 模块 - mod_rewrite - RewriteRule - 匹配任意字符串时,可以借助正则表达式的灵活特性
- requireJS加载模块,define定义模块
- RequireJS进阶-模块的优化及配置的详解
- 计算机视觉与模式识别代码合集第二版three
- 九度1497:面积最大的全1子矩阵
- Untiy3d-c#搞定函数之delegate,event, lambda,Func,Action
- ZOJ1610——Count the Colors
- vs2013环境下编译SDL2.0
- requirejs定义的模块返回的永远是单例对象,可以借助javascript中的类解决模块间的相互干扰问题
- Maven的安装、配置及使用
- 【函数】复数计算
- SEO——网站搜索引擎优化
- Ruby on Rails微信开发1——开发模式的启用与接口配置
- JVM-运行时数据区
- 各种各样的输入输出挂 mmdns~
- yuanchuangwenagcfdecf
- Cracking the coding interview--Q8.4