zoukankan      html  css  js  c++  java
  • JS OOP -04 JS中的公有成员,私有成员和静态成员

    JS中的公有成员,私有成员和静态成员

      a.实现类的公有成员

      b.实现类的私有成员

      c.实现类的静态成员

    a.实现类的公有成员

      之前定义的任何类型成员都属于公有成员的范畴,该类的任何实例都对外公开这些属性和方法.

      注意在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);
                    };
                };
  • 相关阅读:
    前端String类型绑定LocalDate,LocalDateTime参数+返回前端正确格式的日期(全局配置)
    前端String类型绑定Date类型,返回前端正确格式的日期(全局配置)
    Vue移动端App实现自动更新
    centos7docker安装与操作
    springboot2.x+redis缓存
    jquery控制checkbox全选与全不选
    @Resource和@Autowired区别
    java,基本数据类型和引用数据类型
    linux 开启防火墙和配置java环境变量,记得在修改配置后重新加载资源
    Linux的终端,控制台快捷键,命令
  • 原文地址:https://www.cnblogs.com/youguess/p/10606177.html
Copyright © 2011-2022 走看看