首页 > 其他 > 详细

实现 如 goole closure 类似功能模块加载函数

时间:2014-02-06 18:45:18      阅读:323      评论:0      收藏:0      [点我收藏+]

看过goole  closure 的同学都知道  其中定义一个类名函数时候只要  inlude("")   想加载某个模块只要require("")就可以利用:

下面给出一个例子:

<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<id>skldfjskdljf</id>
<script>
(function (window, undefined) {
if (window.define) {
return
}
function isFunction(obj) {
return Object.prototype.toString.call(obj) === "[object Function]"
}

var MM = {};
var initModuleName = "initRun";

 

function require(name) {
if (!MM[name]) {
throw new Error("Module " + name + " is not defined.")
}
var module = MM[name];
if (module.inited === false) {
runModule(name)
}
return module.ret
}

function runModule(name) {
var exports = {};
var module = MM[name];
if (isFunction(MM[name].factory)) {
var ret = MM[name].factory.apply(undefined, [require, exports, undefined]);
module.ret = ret === undefined ? exports : ret
} else {
module.ret = MM[name].factory
}
module.inited = true
}

function define(name, deps, factory) {
if (MM[name]) {
throw new Error("Module " + name + " has been defined already.")
}
if (isFunction(deps)) {
factory = deps
}
MM[name] = {factory:factory, inited:false};
if (name === initModuleName) {
runModule(name)
}
}

window.define = define
})(window);

解释下上面代码  利用闭包保存了  MM对象  这个对象保存了 通过  defined  进行命名的对象 换句话说mm相当于  命名空间。

下面试利用的例子:

 

 

define("tools", function (require, exports) {
var tools = function(){};
tools.prototype = {
testFun : function(){
alert(6656);
}
};

return tools;

});

define("initRun",function(require, exports){
var commTool = require("tools");//通过require 加载需要模块

var tools = new commTool;
tools.testFun();


});
</script>

</body>
</html>

实现 如 goole closure 类似功能模块加载函数

原文:http://www.cnblogs.com/rubyxie/p/3538842.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!