类的定义

方式一

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. java笔记线程方式1等待终止

    public final void join():等待该线程终止 public class ThreadJoinDemo { public static void main(String[] args ...

  2. js实现页面的全屏与退出

    1.在data里面定义: data(){ return{ isScreen:false, } } //是否显示全屏 fullScreen(event){ this.isScreen = !this.i ...

  3. 04-Vue中的动画

    Vue中的动画 为什么要有动画:动画能够提高用户的体验,帮助用户更好的理解页面中的功能: -使用过渡类名 1.html <div id="app"> <input ...

  4. macbookpro安装Ubuntu16.04.1 LTS爬坑之旅。亲测有效(集众家之长)。安装时间为2017-11-19。

    1.格式化U盘 要求:(1)切换分区格式为Mac OS扩展 (日志型):(2)方案(scheme)设置为:GUID Partition Map:如图(使用mac自带磁盘工具) 2.给Ubuntu划分磁 ...

  5. 51nod 1029 大数除法

    1029 大数除法 基准时间限制:4 秒 空间限制:131072 KB 分值: 160 难度:6级算法题  收藏  关注 给出2个大整数A,B,计算A / B和A Mod B的结果. Input 第1 ...

  6. 最大流增广路(KM算法) HDOJ 1533 Going Home

    题目传送门 /* 最小费用流:KM算法是求最大流,只要w = -w就可以了,很经典的方法 */ #include <cstdio> #include <cmath> #incl ...

  7. 401 Binary Watch 二进制手表

    详见:https://leetcode.com/problems/binary-watch/description/ C++: class Solution { public: vector<s ...

  8. 231 Power of Two 2的幂

    给定一个整数,写一个函数来判断它是否是2的幂. 详见:https://leetcode.com/problems/power-of-two/description/ Java实现: class Sol ...

  9. maxItemsInObjectGraph解释

    maxItemsInObjectGraph:一个整数,指定要序列化或反序列化的最大项数,可以限制对象图中要序列化的项数.默认的就是65535,当客户端与WebService之间传递的是对象要序列化的个 ...

  10. pom.xml详情

    这里借鉴一下csdn中的一个系列的博客: 第一篇:POM文件详解 第二篇:maven中的依赖作用范围 第三篇:maven中的可选依赖和依赖排除 第四篇:maven中的dependencies和depe ...