• js封装类


    所谓类,会有以下功能:

    • 构造器
    • 静态属性,静态方法
    • 共有属性,共有方法
    • 私有属性,私有方法

    1.简单的类

    var Person = function(name, age){
        this.name = name;
        this.age = age;
    
        this.sayName = function(){
            console.log(this.name);
        };
    }
    var Person = function(name, age){
        //共有属性
        this.name = name;
        this.age = age;
        //共有方法
        this.sayName = function(){
            console.log(this.name);
        };
    }

    2.复杂的类

    var Person = function(name, age){
        //共有属性
        this.name = name;
        //共有方法
        this.sayName = function(){
            console.log(this.name);
        };
        //静态私有属性(只能用于内部调用)
        var home = "China";
        //静态私有方法(只能用于内部调用)
        function sayHome(){
            console.log(home);
        }
        //构造器
        this.setAge = function(age){
            console.log(age + 12);
        };
        this.setAge(age);
    }
    //静态方法(只能被类来访问)
    Person.sayAge = function(){
        console.log("your age is 12");
    }
    //静态属性(只能被类来访问)
    Person.drink = "water";
    //静态共有方法(类和实例都可以访问)
    Person.prototype.sayWord = function(){
        console.log("ys is a boy");
    }

    3.封装js类

    这里我们用闭包来实现,首先解释下闭包的概念。 
    闭包概念:一个函数有权访问另一个函数作用域中的变量,即在一个函数内部创建另一个函数

    var Person = (function(){
        //静态私有属性方法
        var home = "China";
        function sayHome(name){
            console.log(name + "'s home in " + home);
        }
        //构造函数
        function _person(name, age){
            var _this = this;
            //构造函数安全模式,避免创建时候丢掉new关键字
            if(_this instanceof _person){
                //共有属性, 方法
                _this.name = name;
                _this.getHome = function(){
                    //内部访问私有属性,方法
                    sayHome(_this.name);
                };
                _this.test = sayHome; //用于测试
                //构造器
                _this.setAge = function(age){
                    _this.age = age + 12;
                }(age);
            }else{
                return new _person(name, age);
            }
        }
        //静态共有属性方法
        _person.prototype = {
            constructor: _person,
            drink: "water",
            sayWord: function(){
                console.log("ys is a boy");
            }
        }
        return _person;
    })();
    View Code

    调用:

    var p1 = new Person("ys", 12);
    p1.getHome();                   //ys's home in China
    console.log(p1.age);            //24     
    
    var p2 = Person("ys", 12);
    p2.getHome();                   //ys's home in China
    console.log(p2.age);            //24   
    
    console.log(p2.test == p1.test);  //true, 证明静态私有变量共享性

    总结:

    • 有些公共属性,方法,可以设置为静态的,这样可以在每次实例化的时候,不需要额外开辟内存资源,达到真正意义上的共享,
    • 有些公共的属性方法,只想在内部程序处理时候达到共享,则设置为,静态私有属性方法,
    • 有些公共的属性方法,想在实例对象中达到共享,则设置为prototype属性方法,
  • 相关阅读:
    对称加密和非对称加密
    SpringMVC 请求调用过程
    Swagger2常用注解和使用方法
    玩转汉诺塔
    java序列化
    判断当前时间是否在某时间段内
    docker限制容器日志大小
    MySQL数据库备份与恢复
    MySQL事物
    MySQL用户
  • 原文地址:https://www.cnblogs.com/iampengl/p/8870233.html
Copyright © 2020-2023  润新知