1. class的概念

定义一个class,属性都是private,方法都是public。

Hello.js:

使用class

index.js:

2. 单例类

使用exports而不是module.exports。区别在于Hello导出的是新的Function对象,而single导出的是single.js的初始对象{}。

属性都是private,方法都是public需要exports接口导出。

exports.name = name,相当于给接口{}创建动态属性。是无法导出var name的,因为name不是引用类型。

single.js:

new single()的话会报错。无论在哪里引用require single,值getName都是一样的。

index.js:

3. JS方法和变量的总结

1 对象的方法和属性。可理解为对象原本包含的变量和方法。

Hello.js

//模块封装Hello类
module.exports = Hello; //Hello类定义
function Hello(){
this.age = 1; this.setAge = function(age){
this.age = age;
} this.getAge = function (){
return this.age;
}
}

  

index.js

var Hello = require("./Hello.js");
var hello = new Hello(); //访问age
console.log(hello.age); //1
console.log(hello.getAge()); //1 //修改age
hello.setAge(2); //访问修改后的age
console.log(hello.age); //2
console.log(hello.getAge()); //2 //新的实例,age初始值不变
var hello2 = new Hello();
console.log(hello2.age); //1

  

  

 2 类方法和变量,可理解为类的静态变量和方法

Hello.js

//模块封装Hello类
module.exports = Hello; //Hello类定义
function Hello(){ } Hello.age = 1; Hello.getAge = function(){
return Hello.age;
}

 index.js

var Hello = require("./Hello.js");
var hello = new Hello(); //实例无法访问静态变量
console.log(hello.age); //undifined
//console.log(hello.getAge()); //报错 //访问age
console.log(Hello.age); //1
console.log(Hello.getAge()); //1 //修改age
Hello.age = 2; //访问修改后age
console.log(Hello.age); //2
console.log(Hello.getAge()); //2

 3 原型变量和方法,可理解为对象原本包含的变量和方法。可用于继承。

Hello.js

//模块封装Hello类
module.exports = Hello; //Hello类定义
function Hello(){ } Hello.prototype.age = 1; Hello.prototype.getAge = function(){
return Hello.prototype.age;
}

index.js

var Hello = require("./Hello.js");
var hello = new Hello(); //访问age
console.log(hello.age); //1
console.log(hello.getAge()); //1 //修改age
hello.age = 2; //访问修改后的age
console.log(hello.age); //2
console.log(hello.getAge()); //1 //新的实例
var hello2 = new Hello();
console.log(hello.age); //2
console.log(hello.getAge()); //1

  

4  类外的变量和方法 

Hello.js

//模块封装Hello类
module.exports = Hello; var age = 1;
var getAge2 = function(){
return age;
} //Hello类定义
function Hello(){ this.setAge = function(_age){
age = _age;
} this.getAge = function (){
return age;
}
}

index.js

var Hello = require("./Hello.js");
var hello = new Hello(); //访问age
console.log(hello.age); //undifined
console.log(hello.getAge()); //1 //无法访问getAge2()
//console.log(hello.getAge2()); //报错
//Hello.getAge2(); //报错 //修改age
hello.setAge(2); //访问修改后的age
console.log(hello.age); //undifined
console.log(hello.getAge()); //2 //新的实例
var hello2 = new Hello();
console.log(hello2.age); //undifined
console.log(hello2.getAge()); //2

  

总结:

1. 无法和java、c#那样有class extends implements private protected public static等来定义变量和方法。

2. 对于非前端js的使用者,nodejs的对象使用很变扭。

node中的对象的更多相关文章

  1. node中非常重要的process对象,Child Process模块

    node中非常重要的process对象,Child Process模块Child Process模块http://javascript.ruanyifeng.com/nodejs/child-proc ...

  2. node中的Stream-Readable和Writeable解读

    在node中,只要涉及到文件IO的场景一般都会涉及到一个类-Stream.Stream是对IO设备的抽象表示,其在JAVA中也有涉及,主要体现在四个类-InputStream.Reader.Outpu ...

  3. 深入理解jQuery、Angular、node中的Promise

    最初遇到Promise是在jQuery中,在jQuery1.5版本中引入了Deferred Object,这个异步队列模块用于实现异步任务和回调函数的解耦.为ajax模块.队列模块.ready事件提供 ...

  4. Node中的定时器详解

    在大多数的业务中,我们都会有一些需求,例如几秒钟实现网页的跳转,几分钟对于后台数据进行清理,node与javascript都具有将代码延迟一段时间的能力.在node中可以使用三种方式实现定时功能:超时 ...

  5. node中的流程控制中,co,thunkify为什么return callback()可以做到流程控制?

    前言 我在学习generator ,yield ,co,thunkify的时候,有许多费解的地方,经过了许多的实践,也慢慢学会用,慢慢的理解,前一阵子有个其他项目的同事过来我们项目组学习node,发现 ...

  6. c++中返回对象与返回引用的区别

    这几天在做用C++做课程设计,对其返回对象的实现感到迷惑. 通过对汇编代码的分析,可以清楚的看到,直接返回引用和返回对象的区别到底是什么. 分析的程序如下 #include<cstdio> ...

  7. Node.js全局对象

    Node.js的全局对象是具有全局性的,它们可在所有的模块中应用.我们并不需要包括这些对象在应用中,而可以直接使用它们.这些对象的模块,函数,字符串和对象本身,如下所述. __filename __f ...

  8. 使用express+multer实现node中的图片上传

    使用express+multer实现node中的图片上传 在前端中,我们使用ajax来异步上传图片,使用file-input来上传图片,使用formdata对象来处理图片数据,post到服务器中 在n ...

  9. 简单剖析Node中的事件监听机制(一)

    使用js的class类简单的实现一个事件监听机制,不同于浏览器中的时间绑定与监听,类似于node中的时间监听,并且会在接下来的文章中去根据自己的理解去写一下Event模块中的原理. Node.js使用 ...

随机推荐

  1. jquery树形表格实现方法

    效果图 准备步骤: 具体使用的Dome可以在这个位置下载 http://download.csdn.net/detail/jine515073/7986227 1.引入jquery.treeTable ...

  2. JPA联合主键

    联合主键也就是说需要多个字段才能确定数据库记录中的唯一一行.这样就需要多个字段一起,组成主键,也叫联合主键.例如飞机航线,我们需要知道飞机起飞的地点以及飞机降落的地点.所以需要飞机起飞的地点和降落的地 ...

  3. easyui datagrid列拖拽

    <script type="text/javascript"> var cols = [{ field: 'testName', title: '<span cl ...

  4. 【R】用 ggplot2 绘制漂亮的分级统计地图

    最近我一直尝试利用R绘制地图,我从网上找到了上百种不同的实现方法,然而其中却没有适用于我的数据的方法.最终,我从以下几个博客[1]中找到了灵感.我在整合这些资源的基础上,通过不断的试验和修正得到了一个 ...

  5. Zookeeper 应用程序

    Zookeeper为分布式环境提供灵活的协调基础架构.ZooKeeper框架支持许多当今最好的工业应用程序.我们将在本章中讨论ZooKeeper的一些最显着的应用. 雅虎 ZooKeeper框架最初是 ...

  6. C# winform 获取当前路径

    // 获取程序的基目录. System.AppDomain.CurrentDomain.BaseDirectory// 获取模块的完整路径.System.Diagnostics.Process.Get ...

  7. Blend for Visual Studio 2013

    软件开发中为了使设计师和程序员“并行”工作并直接参与到程序的开发中来. 1.在网络程序开发团队中,草图设计后,设计师们可以使用HTML.CSS.JavaScript直接生成UI,程序员则在这个UI产生 ...

  8. 关于在SQLITE数据库表中插入本地系统时间的做法

    首先,我参考下面的博文地址:http://blog.csdn.net/liuzhidong123/article/details/6847104 sqlite3 表里插入系统时间(时间戳) 分类: s ...

  9. Uniprot 数据库-最常用的蛋白质数据库

    Uniprot 数据库是收录信息最全面的蛋白质数据库,包含swissport, uniparc, TrEMBL 3个子数据库: 其中swiss-prot 是手工核对过的 ,非冗余, 有详细注释信息的蛋 ...

  10. MYSQL 两日期之间的工作日(除去周六日,不考虑节假日)

    select (floor(days/7)*5+days%7      -case when 6 between wd and wd+days%7-1 then 1 else 0 end      - ...