zoukankan      html  css  js  c++  java
  • 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设计模式》作者张荣铭

  • 相关阅读:
    第三个实验代码
    20165104孟凡斌-第五周作业
    20165104孟凡斌-第四周作业
    20165104孟凡斌-第二次java考试课下作业
    20165104孟凡斌-第三周作业
    20165104孟凡斌-第二次JAVA作业
    20165104孟凡斌-第一次Java考试课下作业
    2018-2019-1 《信息安全系统设计基础》 20165235 实验五 通信协议设计
    2018-2019-1 20165235 实验四 外设驱动程序设计
    20165235 实现pwd功能
  • 原文地址:https://www.cnblogs.com/mengjianzhou/p/8571503.html
Copyright © 2011-2022 走看看