类的定义

方式一

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

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

  1. Javascript面向对象基础(二)

    一: 用定义函数的方式定义类在面向对象的思想中,最核心的概念之一就是类.一个类表示了具有相似性质的一类事物的抽象,通过实例化一个类,可以获得属于该类的一个实例,即对象.在JavaScript中定义一个 ...

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

    一.面向对象的编程 面向对象程序设计--Object Oriented Programming,简称oop,是一种程序设计思想.二.面向对象的特性类:class类,对比现实世界来说就是一个种类,一个模 ...

  3. C++面向对象高级编程(五)类与类之间的关系

    技术在于交流.沟通,转载请注明出处并保持作品的完整性. 本节主要介绍一下类与类之间的关系,也就是面向对象编程先介绍两个术语 Object Oriented Programming   OOP面向对象编 ...

  4. Javascript 面向对象的编程思想

    面向对象,首先得有类的概念,没有类造不出来对象,,Javascript把函数名看成类. 其次分为不同结构层,如三层架构.MVC.MVVM. 本文根据实际项目演练,分为几个适用的结构层,如果项目不大一般 ...

  5. C++面向对象高级编程(二)基础篇

    技术在于交流.沟通,转载请注明出处并保持作品的完整性. 概要 知识点1.重载成员函数 知识点2 . return by value, return by reference 知识点3 重载非成员函数 ...

  6. JavaScript 面向对象的编程(三) 类的继承

    定义父类和子类的继承关系 //声明父类 function SuperClass(){ this.superValue = true; } //为父类添加共有方法 SuperClass.prototyp ...

  7. 《JavaScript面向对象的编程指南》--读书笔记

    第一章.引言 1.5 面向对象的程序设计常用概念 对象(名词):是指"事物"在程序设计语言中的表现形式. 这里的事物可以是任何东西,我们可以看到它们具有某些明确特征,能执行某些动作 ...

  8. python基础(25):面向对象三大特性二(多态、封装)

    1. 多态 1.1 什么是多态 多态指的是一类事物有多种形态. 动物有多种形态:人,狗,猪. import abc class Animal(metaclass=abc.ABCMeta): #同一类事 ...

  9. Java面向对象 第3节 类的封装和继承

      一.封装 封装的概念:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的访问和操作. 封装的2个大致原则:1)把尽可能多的东西隐藏起来,对外提供便捷的接口 ...

随机推荐

  1. maven中的三种工程,以及在idea中构建父子工程。

    1.pom工程:用在父级工程或聚合工程中.用来做jar包的版本控制.主要是定义POM文件,将后续各个子模块公用的jar包等统一提出来,类似一个抽象父类 2.war工程:将会打包成war,发布在服务器上 ...

  2. 函数bsxfun,两个数组间元素逐个计算的二值操作

    转自http://www.cnblogs.com/rong86/p/3559616.html 函数功能:两个数组间元素逐个计算的二值操作 使用方法:C=bsxfun(fun,A,B) 两个数组A合B间 ...

  3. 赋予option元素点击事件后,点击select时却触发了option事件。如何解决?

    将select的优先级提到option之前就可以了. 方法:为select元素添加position:relative: <select class="adt" name=&q ...

  4. 分布式消息通信(ActiveMQ)

    分布式消息通信(ActiveMQ) 应用场景 异步通信 应用解耦 流量削峰 # ActiveMQ安装 下载 http://activemq.apache.org/ 压缩包上传到Linux系统 apac ...

  5. (斯特林公式)51NOD 1058 N的阶乘的长度

    输入N求N的阶乘的10进制表示的长度.例如6! = 720,长度为3.   Input 输入N(1 <= N <= 10^6) Output 输出N的阶乘的长度 Input示例 6 Out ...

  6. Golang 入门 : 竞争条件

    笔者在前文<Golang 入门 : 理解并发与并行>和<Golang 入门 : goroutine(协程)>中介绍了 Golang 对并发的原生支持以及 goroutine 的 ...

  7. 例题 5-1 STL

    Raju and Meena love to play with Marbles. They have got a lot of marbles with numbers written on the ...

  8. 洛谷 P1433 吃奶酪(记忆化)

    题目描述 房间里放着n块奶酪.一只小老鼠要把它们都吃掉,问至少要跑多少距离?老鼠一开始在(0,0)点处. 输入输出格式 输入格式: 第一行一个数n (n<=15) 接下来每行2个实数,表示第i块 ...

  9. [Qt Quick入门] 基本元素初体验

    Qt Quick作为QML语言的标准库,提供了很多基本元素和控件来帮助我们构建Qt Quick应用.这节我们简要地介绍一些Qt Quick元素,如Rectangle.Item.Text.Button. ...

  10. 实例化WebService实例对象时出现localhost未引用命名空间

    //实例化WebService实例对象 localhost.WebService WebserviceInstance = new localhost.WebService(); 在实例化WebSer ...