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模式