JS中公共/私有变量和方法

来源:互联网 发布:中国的gis数据交换中心 编辑:程序博客网 时间:2024/04/30 13:10

JS中公共/私有变量和方法

私有变量 在对象内部使用'var'关键字来声明,而且它只能被私有函数和特权方法访问。 

私有函数 在对象的构造函数里声明(或者是通过var functionName=function(){...}来定义),它能被特权函数调用(包括对象的构造函数)和私有函数调用。 
特权方法 通过this.methodName=function(){...}来声明而且可能被对象外部的代码调用。它可以使用:this.特权函数() 方式来调用特权函数,使用 :私有函数()方式来调用私有函数。


公共属性 通过this.variableName来定义而且在对象外部是可以读写的。不能被私有函数所调用。 
公共方法 通过ClassName.prototype.methodName=function(){...}来定义而且可以从对象外部来调用。 
原型属性 通过ClassName.prototype.propertyName=someValue来定义。 

静态属性 通过ClassName.propertyName=someValue来定义。 

静态方法的定义方式是:
类名.方法名 = function(参数1,参数2...参数n){//方法代码}//和静态属性一样不能被实例化对象调用只能被类名字调用

另外注意下这种写法: var 函数名=function 函数名(){...} 这个函数被调用时具有特权函数和私有函数的特性。


    //定义一个javascript类  --------这里要求成员属性和方法必须使用this来引用---
    function JsClass(privateParam, publicParam) {//构造函数  
        var priMember = privateParam;   //私有变量  
        this.pubMember = publicParam;   //公共变量  
        // 定义私有方法
        function priMethod() {
            return "priMethod()";
        }
        // 定义特权方法
        this.pubMethod1 = function () {
            both();              //这种公用方法可以调用私有方法和属性
            return "pubMethod1()";
        }
        // 定义特权方法  (保护方法)
        //特权方法可以访问所有成员
        this.privilegedMethod = function () {
            var str = "这是特权方法,我调用了\n";
            str += "        私有变量:" + priMember + "\n";
            str += "        私有方法:" + priMethod() + "\n";
            str += "        公共变量:" + this.pubMember + "\n";
            str += "        公共方法:" + this.pubMethod();


            return str;
        }


        //函数这样定义时,当它被调用时具有特权函数和私有函数的特性。
        var both = function bothFunction() {
            alert("bothFunction");
        }  

    }


    //添加公共方法  
    //不能调用私有变量和方法  
    JsClass.prototype.pubMethod2 = function () {
        both();                        //这里不能调用私有方法,会报错
        return "pubMethod2()----";
    }
    // 使用 JsClass的实例  
    JsObject = new JsClass("priMember111", "pubMember222");


    //alert(JsObject.pubMember);//弹出pubMember信息  
    // alert(JsObject.priMember);//弹出undefined信息  
    //alert(JsObject.pubMethod1()); //弹出pubMethod信息  
    alert(JsObject.pubMethod2()); //弹出prototype.pubMethod信息  
    //alert(JsObject.priMethod()); //弹出"对象不支持此属性或方法"的错误  
    // alert(JsObject.privilegedMethod());  
     //alert(JsObject.both());



Javascript的public、private和privileged模式
     http://hideto.javaeye.com/blog/103537