node中的对象
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中的对象的更多相关文章
- node中非常重要的process对象,Child Process模块
node中非常重要的process对象,Child Process模块Child Process模块http://javascript.ruanyifeng.com/nodejs/child-proc ...
- node中的Stream-Readable和Writeable解读
在node中,只要涉及到文件IO的场景一般都会涉及到一个类-Stream.Stream是对IO设备的抽象表示,其在JAVA中也有涉及,主要体现在四个类-InputStream.Reader.Outpu ...
- 深入理解jQuery、Angular、node中的Promise
最初遇到Promise是在jQuery中,在jQuery1.5版本中引入了Deferred Object,这个异步队列模块用于实现异步任务和回调函数的解耦.为ajax模块.队列模块.ready事件提供 ...
- Node中的定时器详解
在大多数的业务中,我们都会有一些需求,例如几秒钟实现网页的跳转,几分钟对于后台数据进行清理,node与javascript都具有将代码延迟一段时间的能力.在node中可以使用三种方式实现定时功能:超时 ...
- node中的流程控制中,co,thunkify为什么return callback()可以做到流程控制?
前言 我在学习generator ,yield ,co,thunkify的时候,有许多费解的地方,经过了许多的实践,也慢慢学会用,慢慢的理解,前一阵子有个其他项目的同事过来我们项目组学习node,发现 ...
- c++中返回对象与返回引用的区别
这几天在做用C++做课程设计,对其返回对象的实现感到迷惑. 通过对汇编代码的分析,可以清楚的看到,直接返回引用和返回对象的区别到底是什么. 分析的程序如下 #include<cstdio> ...
- Node.js全局对象
Node.js的全局对象是具有全局性的,它们可在所有的模块中应用.我们并不需要包括这些对象在应用中,而可以直接使用它们.这些对象的模块,函数,字符串和对象本身,如下所述. __filename __f ...
- 使用express+multer实现node中的图片上传
使用express+multer实现node中的图片上传 在前端中,我们使用ajax来异步上传图片,使用file-input来上传图片,使用formdata对象来处理图片数据,post到服务器中 在n ...
- 简单剖析Node中的事件监听机制(一)
使用js的class类简单的实现一个事件监听机制,不同于浏览器中的时间绑定与监听,类似于node中的时间监听,并且会在接下来的文章中去根据自己的理解去写一下Event模块中的原理. Node.js使用 ...
随机推荐
- 一、drupal 安装汉化
下载 Drupal 7: 下载语言包文件:到 http://localize.drupal.org/translate/languages/zh-hans 页面下载对应版本的语言包(.po文件) 安装 ...
- Aria2 懒人安装教程
https://aria2.github.io/ uI版:https://github.com/ziahamza/webui-aria2 web的 可以在线使用的 https://ziahamza.g ...
- Ajax轮询——“定时的通过Ajax查询服务端”
Ajax轮询——"定时的通过Ajax查询服务端". 概念: 轮询(polling):客户端按规定时间定时像服务端发送ajax请求,服务器接到请求后马上返回响应信息并关闭连接. 百闻 ...
- 【转】【C#】ZIP、RAR 压缩与解压缩
压缩文件夹 源码如下 using System; using System.Data; using System.Configuration; using System.Web; using Syst ...
- 【转】【Linux】Linux 命令行快捷键
Linux 命令行快捷键 涉及在linux命令行下进行快速移动光标.命令编辑.编辑后执行历史命令.Bang(!)命令.控制命令等.让basher更有效率. 常用 ctrl+左右键:在单词之间跳转 ct ...
- PyQT中多重继承,其中继承的父类有QObject或QObject的子孙类
如果Child多重继承(Parent_1,Parent_2,Parent_3),其super函数 super(Child, self).__init__() 则会执行继承的最左侧的父类:Parent_ ...
- 转载:erlang程序优化点的总结
erlang程序优化点的总结(持续更新) 转自:http://wqtn22.iteye.com/blog/1820587 转载请注明出处 注意,这里只是给出一个总结,具体性能需要根据实际环境和需要来确 ...
- js 查找指定函数的内容
function test(){ //hahahhahahhahahha }alert(test.toString());
- 【Java面试题】52 java中会存在内存泄漏吗,请简单描述。
所谓内存泄露就是指一个不再被程序使用的对象或变量一直被占据在内存中.Java中有垃圾回收机制,它可以保证一对象不再被引用的时候,即对象编程了孤儿的时候,对象将自动被垃圾回收器从内存中清除掉.由于Jav ...
- 【转载】Redhat5和6 YUM源配置的区别
Redhat5和6 YUM源配置的区别 一.概述 随着各个软件版本的不断升级,我们需要掌握的软件特性也越来越多,技术的不断更新也促进了我们脑细胞的循环. 今天在配置RedHat6.3的yum源 ...