JavaScript 面向对象的编程(二) 类的封装

类的定义

方式一

var Book = function(id, name, price){
    //私有属性,外部不能直接访问
    var num = 1;
    //私有方法,
    function checkId(){};
    this.getName = function(){};
    this.getPrice = function(){};
    this.setName = function(){};
    this.setPrice = function(){};

    this.id = id;
    this.copy = function(){};
    this.setName(name);
    this.setPrice(price);
}

Book.isChinese = true;
Book.resetTime = function(){
    console.log('new time');
}

Book.prototype= {
    isJSBook : false,
    display : function(){}            
}

var b = new Book(11, 'JavaScript 设计模式', 50);
console.log(b.num);
console.log(b.isJSBook);
console.log(b.id);
console.log(b.isChinese);

方式二

var Book = (function(){
    
    var bookNum = 0;
    
    function checkBook(name){

    }

    //返回构造函数
    return function(newId,newName,newPrice){
        //私有变量
        var name,price;
        //私有方法
        function checkID(id){}
        //特权方法
        this.getName = function(){};
        this.getPrice = function(){};
        this.setName = function(){};
        this.setPrice = function(){};

        //共有属性
        this.id = newId;
        //公有方法
        this.copy = function(){};
        bookNum++;
        if(bookNum>100){
            throw new Error('我们仅出版100本书');        
        }
        this.setName(name);
        this.setPrice(price);
    }
})();

Book.prototype = {
    //静态公有属性
    isJSBook:false,
    display:function(){}
}

方式三

var Book = (function() {
    //静态私有变零
    var bookNum = 0;
    //静态私有方法
    function checkBook(name){}
    //创建类
    function _book(newId,newName,newPrice){
        //私有变量
        var name,price;
        name = newName;
        price = newPrice;
        //私有方法
        function checkID(id){}
        //特权方法(创建的对象可以访问)
        this.getName = function(){return name;};
        this.getPrice = function(){return price;};
        this.setName = function(mingcheng){name = mingcheng;};
        this.setPrice = function(){};

        //公有属性(对象可以访问)
        this.id = newId;
        //公有方法(对象可以访问)
        this.copy = function(){};
        bookNum++;
        if(bookNum>100){
            throw new Error('我们仅出版100本书');        
        }
        //构造器
        this.setName(name);
        this.setPrice(price);
    }

    //构造原型
    _book.prototype = {
        //静态公有属性
        isJSBook: false,
        //静态公有方法
        display:function(){ return 'hello world'}    
    };
    
    return _book;
})();

var book = new Book(10,'javascript',100);

console.log(book);
console.log(book.isJSBook);
console.log(book.getName());
console.log(book.id);
console.log(book.getPrice());
book.setName('test01');
console.log(book.getName());
console.log(book.display());

测试环境node.js 版本8.10.0

有版权问题请留言,或加我qq362601125

参考列表

1.《JavaScript设计模式》作者张荣铭

原文地址:https://www.cnblogs.com/mengjianzhou/p/8571503.html