我是FE,也是Fe

前端来源于不断的点滴积累。我一直在努力。

统计

留言簿(15)

阅读排行榜

评论排行榜

兼容AMD,nodejs/commonjs规范的模块定义-读knockoutjs源码

从knockoutjs源码中读到了一个很好的能兼容AMD,commonjs规范的模块定义。看代码
/闭包执行一个立即定义的匿名函数
!function(factory) {

    
//factory是一个函数,下面的koExports就是他的参数

    
// Support three module loading scenarios
    if (typeof require === 'function&& typeof exports === 'object' && typeof module === 'object') {
        
// [1] CommonJS/Node.js
        // [1] 支持在module.exports.abc,或者直接exports.abc
        var target = module['exports'] || exports; // module.exports is for Node.js
        factory(target);
    } 
else if (typeof define === 'function&& define['amd']) {
        
// [2] AMD anonymous module
        // [2] AMD 规范 
        //define(['exports'],function(exports){
           //    exports.abc = function(){}
        //});
        define(['exports'], factory);
    } 
else {
        
// [3] No module loader (plain <script> tag) - put directly in global namespace
        factory(window['ko'] = {});
    }
}(
function(koExports){

    
//ko的全局定义 koExports是undefined 对应着上面的[3] 这种情况
    var ko = typeof koExports !== 'undefined' ? koExports : {};

    
//定义一个ko的方法
    ko.abc = function(s){
        alert(s);
    }
});

//[3]中情况的调用
ko.abc("msg");

非常巧妙的闭包实现了。三种方式的兼容。摘出来mark一下。





posted on 2012-08-18 16:51 衡锋 阅读(2859) 评论(1)  编辑  收藏 所属分类: javascriptWeb开发

评论

# re: 兼容AMD,nodejs/commonjs规范的模块定义-读knockoutjs源码 2012-10-16 21:14 屠龙网赚

一般人是看不明白的。  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: