zoukankan      html  css  js  c++  java
  • JavaScript模块模式

    module pattern

    目前了解到的有三种模块模式的书写方式,可根据需要选择最合适的。

    第一种:原始方式书写的模块

    function m1 () {}
    function m2 () {}
    function m3 () {}
    //...
    

    第二种:创建对象的方式书写的模块

    var module = {
        count: 1,
        addNum: function() {
            this.count++;
        },
        minusNum: function() {
            this.count--;
        }
    };
    module.addNum();
    module.minusNum();
    module.count = 1;   //会被篡改
    

    第三种:设置带私有变量的模块模式

    知识储备:

    1. 自执行函数 闭包closure

    (function() {
        //code
    })();
    
    //or
    (function(){
        //code
    }());
    //两种匿名函数自执行方式的效果一样
    //纠正一个观念:闭包不会引起内存泄漏,内存泄漏是程序员使用闭包的方式不当导致的。
    

    贺师俊在知乎上的回答:

    闭包不会造成内存泄漏。程序写错了才会造成内存泄漏。另外,那些书讲的事情应该是:老浏览器(主要是IE6)由于垃圾回收有问题导致很容易出现内存泄漏。但是那是浏览器实现的bug。如果书里面没把这个意思写清楚,那就是本烂书,不要看了,赶紧扔掉。

    2. Module

    var module = (function() {
        return {}
    })();
    

    3. private var & method

    
    //外部访问不到_self与addNum
    var module = (function() {
        var _self;
        var addNum = function() {};
        return {}
    })();
    

    4. return 暴露给用户的方法/属性

    //可供外部访问的变量通过return暴露出来
    var module = (function() {
        var _self;
        var addNum = function() {};
        return {
            _self: _self,
            addNum: addNum
        }
    })();
    
    module._self;
    module.addNum();
    

    总结:

    所以使用模块模式可以采用以下的编码形式:

    var module = (function() {
        var _private;
        var public;
        var _privateMethod = function() {};
        var someMethod = function() {};
        var anotherMethod = function() {};
        return {
            public: public,
            someMthod: someMethod,
            anotherMethod: anotherMethod
        }
    })();
    

    然后提供一个接口用于扩展的方法:

    var module = (function() {
        var _private;
        var public;
        var _privateMethod = function() {};
        var someMethod = function() {};
        var anotherMethod = function() {};
        return {
            public: public,
            someMthod: someMethod,
            anotherMethod: anotherMethod
            
            //看这里
            extension: function() {}
        }
    })();
    var moduleTwo = (function(module) {
        module.extension = function() {
            //anotherMethod
        };
        return module;
    })(module || {});
    

    私有变量一般使用_+变量名的命名形式。

  • 相关阅读:
    LibreOJ 6282 数列分块入门 6(在线插入在线查询)
    LibreOJ 6281 数列分块入门 5(分块区间开方区间求和)
    LibreOJ 6280 数列分块入门 4(分块区间加区间求和)
    LibreOJ 6279 数列分块入门 3(分块+排序)
    LibreOJ 6278 数列分块入门 2(分块)
    LibreOJ 6277 数列分块入门 1(分块)
    BZOJ 2301 Problem b(莫比乌斯反演+分块优化)
    MD5Untils加密工具类
    20160418javaweb之 Filter过滤器
    20160417javaweb之servlet监听器
  • 原文地址:https://www.cnblogs.com/foxNike/p/6337305.html
Copyright © 2011-2022 走看看