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);
                };
            };
相关文章
相关标签/搜索