• 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设计模式》作者张荣铭

  • 相关阅读:
    Redis-安装
    Redis-介绍
    Redis 教程(转)
    C# Redis 帮助类
    sublime text3---Emmet:HTML/CSS代码快速编写神器
    Sublime Text3 Package Control和Emmet插件安装方法
    vs2010音频文件压缩 调用lame_enc.dll将WAV格式转换成MP3
    vs学习过程中遇见的各种问题
    vs2010中添加dll文件
    解决angular11打包报错Type 'Event' is missing the following properties from type 'any[]': ...Type 'Event' is not assignable to type 'string'
  • 原文地址:https://www.cnblogs.com/mengjianzhou/p/8571503.html
Copyright © 2020-2023  润新知