JS OOP -04 JS中的公有成員,私有成員和靜態成員

JS中的公有成員,私有成員和靜態成員

  a.實現類的公有成員

  b.實現類的私有成員

  c.實現類的靜態成員

 

a.實現類的公有成員

  以前定義的任何類型成員都屬於公有成員的範疇,該類的任何實例都對外公開這些屬性和方法.app

  注意在JS中,其實沒有私有的概念~框架

 

b.實現類的私有成員

       //私有成員
            /*
             * 私有成員即在類的內部實現中能夠共享的成員,不對外公開. 
             * JS中並無特殊的機制來定義私有成員,但能夠用一些技巧來實現這個功能.
             */
            
            /*
             * 這個技巧主要是經過變量的做用域性質來實現的,在JS中,一個函數內部定義的變量稱爲局部變量,
             * 該變量不可以被此函數外的程序所訪問,卻能夠被函數內部定義的嵌套函數所訪問.
             * 在實現私有成員的過程當中,正是利用了這一性質.
             * 在前面提到,在類的構造函數中能夠爲類添加成員,經過這種方式定義的類成員,實際上共享了在構造函數內部定義的局部變量,
             * 這些變量就能夠看做類的私有成員.
             */
            function class1(){
                
                var pp='this is a private property';//私有屬性成員pp
                
                function pm(){//私有方法成員pm,顯示pp的值
                    alert(pp);
                };
                
                this.Method1=function(){//在公有成員中改變私有屬性的值
                    pp='pp has been changed';
                };
                
                this.Method2=function(){//在公有成員中調用私有方法
                    pm();
                };
            };
            
            var obj1= new class1();
            
            obj1.Method1();
            obj1.Method2();
            
            alert(obj1.pp);//undefined 訪問不到
            alert(obj1.pm);//undefined 訪問不到
            //***var __age =10; 通常這樣定義私有變量名,包括私有的方法
            

 

c.實現類的靜態成員

       //靜態成員
            /*
             * 靜態成員屬於一個類的成員,它能夠經過"類名.靜態成員名"的方式訪問.
             * 在JS中,能夠給一個函數對象直接添加成員來實現靜態成員,由於函數也是一個對象,因此對象的相關操做,對函數一樣適用.
             * 在JS中,不能用靜態成員訪問實例成員,也不能用實例成員訪問靜態成員,二者是不相通的.
             */
            function class2(){//構造函數
                
            };
            class2.staticProperty='sample';//靜態屬性
            class2.staticMethod=function(){//靜態方法
                alert(class2.staticProperty);
            };
            class2.staticMethod();
            /*
             * 類class1添加了一個靜態屬性和靜態方法,而且在靜態方法中引用了該類的靜態屬性.
             * 若是要給每一個函數對象都添加通用的靜態方法,還能夠經過函數對象所對應的類Function來實現
             */
            //給類Function添加原型方法:showArgsCount!
            Function.prototype.showArgsCount=function(){//定義靠前
                alert(this.length);    
            }
            function class3(a){
                
            }
            class3.showArgsCount();
            
            /*
             * 以上,經過Function的prototype原型對象,能夠給任何函數都加上通用的靜態成員,這在實際開發中能夠起到很大的做用.
             * 
             */
       /*prototype.js框架*/
            Function.prototype.bind=function(object){
                var _method=this;
                return function(){
                    _method.apply(object,arguments);
                };
            };
            
            Function.prototype.bindAsEventListener=function(object){
                var _method=this;
                return function(event){
                    _method.call(object,event || window.event);
                };
            };
相關文章
相關標籤/搜索