js封装

Others 2019-03-22 08:12:06 2019-03-22 08:12:06 1886 次浏览
/*
    * 2、闭包的封装方式,在这个封装方法中,所有的实例成员都共享属性和方法
    * 使得所有得方法和属性都私有且对象间共享
    * */
    var Person=(function(){
        /*共享函数*/
        let checkNo=function(no){
            if(!no.constructor=="string"||no.length!=4){
                throw new Error("必须为4位数");
            };
        };
        let times=0;//共享数据
        return function(no,name,age){
            console.log(times++);
            this.setNo=function(no){
                checkNo(no);
                this._no=no;
            };
            this.getNo=function(){
                return this._no;
            };
            this.setName=function(name){
                this._name=name;
            };
            this.getName=function(){
                return this._name;
            };
            this.setAge=function(age){
                this._age=age;
            };
            this.getAge=function(age){
                return this._age;
            };
            this.setNo(no);
            this.setAge(age);
            this.setName(name);
 
        }
    })();
    Person.prototype={
        constructor:Person,
        toString:function(){
            return "no = " + this._no + " , name = " + this._name + " , age = " + this._age;
        }
    }
 
    let per=new Person("0001",15,"simu");//输出之后times会逐渐增加,变为1、2、3
    let per1=new Person("0002",15,"simu1");
    let per2=new Person("0003",15,"simu2");
    console.log( per.toString());
    console.log( per1.toString());
    console.log( per2.toString());

jq方式:


var  Person=(function(window){
       var Person=function(data){
            return new Person.fn.init(data);
       }
       Person.fn=Person.prototype={
           constructor:Person,
           data1:{
               val:12
           },
           init:function(data){
               this.data=data;
               this.sayHello=function(){
                   console.log(this.data+"say Hello");
               }
           },
           sayHi:function(){
               console.log(this.data);
               console.log(this.data1);
           },
        
   };
   Person.fn.init.prototype=Person.fn;
   return Person;

})(); var p1=Person("lining"); p1.sayHello(); p1.sayHi();