`

private static member in javascript

阅读更多
原文链接
http://www.litotes.demon.co.uk/js_info/private_static.html
期待简译。

有一些代码,整得有些过了,但还是很值得参考。在jct的代码中看到了类似的用法。
在js中隐藏变量还是有必要的,否则和其他的js库冲突,就会很麻烦,很难找到bug。

贴几段代码,明白人都看得懂。
var MyObject = (function(){
    /*private static (class) member*/
    var counter = 0;
    /*private static method.*/
    function incrementCounter(){
        return counter++;
    };
    /*class constructor.*/
    function constructorFn(id){
        this.id = id;
        var self = this;
        /*call private static (class)
        method and assign the returned
        index to a private instance member.*/
        var index = incrementCounter();
        /*privileged instance method.*/
        this.getIndex = function(){
            return index;
        };
    };
    /*privileged static (class) method
    (a property of the constructor)*/
    constructorFn.getNoOfInsts = function(){
        return counter;
    };
    /*public instance method privaliged at the
    class level*/
    constructorFn.prototype.pubInstMethod = function(){
        ...
    };
    /*return the constructor.*/
    return constructorFn;
})(); //simultaneously define and call (one-off)!

/*public static  member*/
MyObject.pubStatic = "anything"

/*public instance member*/
MyObject.prototype.pubInstVar = 8;


再来一段
var global = this;
(function(){
    var classGroupMember = 3;
    function privateToClassGroup(){
        /*this method could be a utilitiy
        for the classes in the group or used
        as an internal object constructor.*/
        ...
    };
    global.MyObject1 = function(){
        var privteStaticMember = 4;
        function privateStaticMethod(){
            ...
        };
        function constructorFn(id){
            ...
        };
        /*return the constructor.*/
        return constructorFn;
    }();  //simultaneously define and call!
    global.MyObject2 = function(){
        function constructorFn(id){
            ...
        };
        /*return the constructor.*/
        return constructorFn;
    }();  //simultaneously define and call!
    global.MyObject3 = function(){
        function constructorFn(id){
            ...
        };
        /*return the constructor.*/
        return constructorFn;
    }();  //simultaneously define and call!
})();  //simultaneously define and call!


再来一段:
/*constructor function */
function MyObject(){
    ...
}

MyObject.prototype = (function(){
    /*private static (class) member*/
    var privateStaticProp = "anything";
    /*private static method .*/
    function privateStatic Method = function(){
        ...
    }
    return ({
        /*These functions objects are shared by
        all instances that uses this prototype
        and they have access to the private static
        members within the closure that returns
        this object*/
        publicInstanceMethod:function(){
            ...
        },
        setSomething:function(s){
            privateStaticProp = s;
        }
    });
})();

/*public instance member*/
MyObject.prototype.pubInstVar = 8;


分享到:
评论

相关推荐

    JsDoc-Toolkit标签一览表

    - **注释**:在JavaScript代码中添加特殊格式的注释,用于描述代码的功能、参数、返回值等信息。 - **标签**:注释中使用的特定关键字,用于标注代码的不同方面。 - **文档生成**:基于代码中的注释自动创建文档的...

    WCF返回JSON学习笔记

    private static readonly UserList _Instance = new UserList(); private UserList() { } public static UserList Instance { get { return _Instance; } } public IList<CTA> Users { get { return _...

    javaweb系统的枚举设计

    首先,枚举可以用来替代传统的常量类,后者往往通过public static final字段来定义一组相关的常量。枚举的优势在于它们是类型安全的,不允许添加、删除或修改枚举值,防止了运行时错误。此外,枚举天然支持单例模式...

    Java基础必会单词.doc

    3. **Public/Private/Static/Void/Main**:`public`是访问修饰符,表示该类、方法或变量可以被任何其他类访问。`private`则限制了访问权限,只允许在声明它的类内部访问。`static`关键字用于创建类级别的变量或方法...

    Discuz!_X2笔记.pdf

    7. **static**:图片、JavaScript等静态资源目录。 8. **template**:模板源文件目录,用于存放前端页面的模板文件。 9. **uc_client**:UCenter客户端接口目录,用于与UCenter服务器端进行通信。 10. **uc_server**...

    vscode-docthis:Visual Studio Code的JSDoc生成器扩展

    支持JSDoc和Closure Compiler标签:@ class,@ description,@ enum,@ export,@ function,@ implements,@ interface,@ param,@ private,@ returns或@ return,@ static,@ template,@ type,@ memberOf和@...

    为什么rest接口返回json建议采用下划线形式,不要用驼峰

    public static String camelToUnderline(String param) { // 实现代码略 } ``` 此外,@JsonProperty注解是Jackson库提供的一个功能,可以让开发者自定义在序列化和反序列化过程中JSON字段的名称,这样可以在字段上...

    JAVA编程常用英文单词汇总.doc

    12. **Member-variable** 和 **Member-function**:成员变量是类内部的变量,成员函数是类内部的方法。 13. **Access Modifiers**:访问修饰符,如`public`, `private`, `protected` 和 `default`,控制类的成员对...

    java软件开发基本单词.doc

    16. **member-variable**和**member-function**:类的成员变量和成员函数,是类定义的一部分,属于类的实例。 17. **public**、**private**、**protected**和**default**:访问修饰符,控制类的成员对其他代码的...

    JAVA基础面试题(经典).docx

    15. **类方法和实例方法**:类方法由`static`修饰,不依赖于实例,可以直接通过类名调用;实例方法与对象关联,需通过对象调用。 16. **方法和变量命名规则**:遵循驼峰命名法,首字母小写,后续单词首字母大写。 ...

    java必备单词.doc

    19. **member-variable** 和 **member-function**: 类的内部变量和方法,属于类的成员。 20. **public**、**private**、**protected** 和 **default**: 访问修饰符,用于控制类成员的可见性。 21. **static**: ...

    JAVA必备英文单词.docx

    31. **Static**:静态,修饰符,表示类级别的变量或方法,不依赖于对象实例。 32. **Void**:无,表示方法没有返回值。 33. **Extends**:继承,子类从父类继承属性和方法。 34. **Parent Class**:父类,被其他...

    JAVA编程中常用的英文单词词汇汇总.doc

    31. **Static**:静态,修饰符,表示类级别的变量或方法,不依赖于对象实例。 32. **Void**:无,表示方法没有返回值。 33. **Extends**:继承,子类继承父类的属性和方法。 34. **Parent Class**:父类,被其他...

Global site tag (gtag.js) - Google Analytics