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

时间: 2024-11-07 15:35:56

JavaScript 面向对象的编程(二) 类的封装的相关文章

javascript 总结(常用工具类的封装,转)

javascript 总结(常用工具类的封装) 前言 因为工作中经常用到这些方法,所有便把这些方法进行了总结. JavaScript 1. type 类型判断 isString (o) { //是否字符串 return Object.prototype.toString.call(o).slice(8, -1) === 'String' } isNumber (o) { //是否数字 return Object.prototype.toString.call(o).slice(8, -1) ==

Javascript面向对象基础(二)

一: 用定义函数的方式定义类在面向对象的思想中,最核心的概念之一就是类.一个类表示了具有相似性质的一类事物的抽象,通过实例化一个类,可以获得属于该类的一个实例,即对象.在JavaScript中定义一个类的方法如下:function class1(){       //类成员的定义及构造函数}这里class1既是一个函数也是一个类.可以将它理解为类的构造函数,负责初始化工作. 二:使用new操作符获得一个类的实例new Date(); 表示创建一个日期对象,而Date就是表示日期的类,只是这个类是

python学习笔记--面向对象的编程和类

一.面向对象的编程 面向对象程序设计--Object Oriented Programming,简称oop,是一种程序设计思想.二.面向对象的特性类:class类,对比现实世界来说就是一个种类,一个模型.一个类即是对一类拥有相同属性的对象的抽象.蓝图.原型.在类中定义了这些对象的都具备的属性(variables(data)).共同的方法. 对象:object对象,也就是指模型造出来的具体的东西.一个对象即是一个类的实例化后实例,一个类必须经过实例化后方可在程序中调用,一个类可以实例化多个对象,每

JavaScript面向对象的编程

面向对象编程,大家听得多并且也一直在使用着,面向对象程序语言具有三个基本特征: 封装.继承.多态.概括性地理解,封装就是把数据或者方法等相关信息存储在对象中的能力.继承就是从另一个类中获得属性和方法的能力.多态就是编写和实现名字相同但是行为不同的函数或方法的能力. 那么,对于JavaScript面向对象编程又是怎么一回事呢?实际上跟C++.JAVA的面向对象编程是有挺大的差异,很多开发者对JavaScript如何创建类一直处于模糊状态,甚至没能理解.本文着重介绍JavaScript是如何创类对象

【C/C++学院】0817-递归汉诺塔 双层递归 /CPP结构体 /面向过程与面向对象的编程模式/类的常识共用体实现一个类的特征/QT应用于类以及类的常识

递归汉诺塔 双层递归 #include <iostream> void han(int n, char A, char B, char C) { static int num = 1; std::cout << "第" << num << "次"; num++; if (n<1) { return; } else { han(n - 1, A, C, B); std::cout << A <&l

C++面向对象高级编程(二)

版权声明:本文为博主原创文章,未经博主允许不得转载. 接下来的几篇文章,我将回忆一下C++的基础. C++的由两部分组成 1.C++语言 2.C++标准库 本篇文章主要分享我学习C++语言的笔记. 这次主要回忆一下操作符重载. 先看一段代码,后续我会介绍这么做的原由 #include <iostream> class complex { public: complex(double r = 0, double i = 0) : re(r) ,im(i) {} complex& oper

python中的oop面向对象基本编程(类、实例、魔术)

                  OOP面向对象(老师说这玩意蕴含基本哲学哦!!) 面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数.数据封装.继承和多态是面向对象的三大特点. 面向过程的程序设计把计算机程序视为一系列的命令集合,即一组函数的顺序执行.为了简化程序设计,面向过程把函数继续切分为子函数,即把大块函数通过切割成小块函数来降低系统的复杂度. 而面向对象的程序设计把

JavaScript面向对象精要(二)

构造函数和原型对象 构造函数也是函数,用new创建对象时调用的函数,与普通函数的一个区别是,其首字母应该大写.但如果将构造函数当作普通函数调用(缺少new关键字),则应该注意this指向的问题. var name = "Pomy"; function Per(){ console.log("Hello "+this.name); } var per1 = new Per(); //"Hello undefined" var per2 = Per(

javascript 总结(常用工具类的封装)

1. type 类型判断 isString (o) { //是否字符串 return Object.prototype.toString.call(o).slice(8, -1) === 'String' } isNumber (o) { //是否数字 return Object.prototype.toString.call(o).slice(8, -1) === 'Number' } isObj (o) { //是否对象 return Object.prototype.toString.ca