类的定义

方式一

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. C#面向过程之局部变量、成员变量、变量作用域、可变参数

    局部变量与成员变量:  局部变量:定义在方法里面的变量就叫做局部变量:没有默认的初始值,使用变量之前必须给它赋值成员变量:定义在类下面的变量叫做成员变量:如果是数值类型默认初始值为0 如果是引用类型默 ...

  2. JSP共享范围

    概念:对象的声明周期和可访问性称为作用域(scope). 注:有时候内置对象的作用域一旦设置就不能修改,其他对象(如JavaBean)可以设置他的作用域 作用域类型: Page:页面域(对象只对于它所 ...

  3. phpAnalysis调试接口

    phpAnalysis是一款轻量级非侵入式PHP应用性能分析器,适用于开发.测试及生产环境部署使用,方便开发及测试工程师诊断性能问题: 通过tideways收集PHP程序单步运行过程中所有的函数调用时 ...

  4. 237 Delete Node in a Linked List 删除链表的结点

    编写一个函数,在给定单链表一个结点(非尾结点)的情况下,删除该结点. 假设该链表为1 -> 2 -> 3 -> 4 并且给定你链表中第三个值为3的节点,在调用你的函数后,该链表应变为 ...

  5. python--12、pymysql模块

    安装 pip3 install pymysql 使用方法(示例表为用户注册信息表): import pymysql user=input('username: ').strip() pwd=input ...

  6. php angular/think angular/php模版引擎

    在thinphp5中发现一个好用的模版引擎—think-angular, 此模板引擎主要特点是 不需要额外的标签定义, 全部使用属性定义, 写好的模板文件在IDE格式化代码的时候很整洁, 因为套完的模 ...

  7. 【Android开发】XML文件解析

    最近在做一个项目,涉及到XML文件的解析,废话不多说,如下: 读取 private ArrayList<Data> readXMLLocked() { File file = new Fi ...

  8. 华硕(ASUS)X554LP笔记本一开机就进入aptio setup utility 问题的解决

    某次因大意一直未插电,华硕(ASUS)X554LP笔记本后来没电关机.后来每次一开机就进入aptio setup utility界面,按F9调入默认配置,F10保存后退出,重启仍然进入aptio se ...

  9. outlook 2016 接收发送无法及时收下邮件,如何更改接收时间?

    1. 单击“文件” > “选项” > “高级” > “发送和接收”,单击”发送/接收“ 2. 组“所有账户”的设置 > 打勾“安排自动发送/接收的时间间隔为(V)” 1 分钟 ...

  10. Maven之pom.xml详释

    什么是pom? POM(Project Object Model):全称项目对象模型,它是Maven项目中的文件,使用XML表示,名称叫做pom.xml.在Maven项目中,必须包含pom.xml文件 ...