文档章节

node.js面向对象实现(一)类和对象

mifans
 mifans
发布于 2017/02/14 10:25
字数 920
阅读 154
收藏 0
点赞 0
评论 0

使用Node.js好一段时间了,其实大部分还是停留在使用的阶段对于它(或者也可以说是JS)的很多特性也不是非常的了解,之后要开始做自己的东西了,所以严谨的态度还是要保持的,在这里记录下Node.js中面向对象的实现吧~~也希望可以帮助到很多在学习Node.js的朋友!

首先我们要理解几个概念
1 模块
模块是node.js应用程序的基本组成部分,在node.js的项目中文件和模块是一一对应的,换而言之一个node.js文件就可以理解为一个模块,这个文件可能是js代码,json或者是编译过的C/C++扩展。(摘自Node.js开发指南)。
     OK!有了模块的概念我们可以用他做什么呢?
      回想一下在传统的OO语言比如C++,或者OC,C#中,同样的我们一般会用一个文件代表一个类(当然可能很多朋友在C#中会在一个文件中定义若干个类- -),在需要使用某个已经定义过的类时我们经常会采用引用该类的方式在当前上下文中对其进行操作,如:

定义一个TestClass
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Test
{
    class TestClass
    {
        public int i = 0;
    }
}

引用并且使用
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            TestClass t = new TestClass();
        }
    }
}

那么我们在node.js中如何定义一个类呢?按照常规的步骤我们需要完成一下几件事情
1 创建一个文件来编写自定义类
2 在需要使用该类的地方引用自定义类
3 调用自定义类的方法

(1)我们新建一个baseClass.js文件
node.js面向对象实现(一)类和对象
   我们需要在JS文件中打如自定义类的代码,并且使用node.js的特性将我们定义的Base类封装成模块
node.js面向对象实现(一)类和对象
大家注意在baseClass.js中我定义了一个名为Base的方法,用他作为类的构造函数,同时我将模块的访问接口改为了Base方法,这也就意味着我们可以通过该模块的接口获取一个新的baseClass对象。

这里再对JS中的方法和变量做个简单的描述
JS中有3中类型的方法和变量
1 对象方法(变量),对象本身包含的方法和变量
2 类方法(变量),可以理解为类的静态方法和变量
3 原型方法(变量),也可以理解为是对象本身包含的方法

(2) 有了类我们就可以使用node.js提供的require方法在类外的地方导出并且使用我们的自定义类了,这里需要注意的是require之后填入的路劲为相对路径

node.js面向对象实现(一)类和对象

至此我们就完成了在node.js中自定义类并且初始化类的对象以及调用对象的方法!
最后要说一下其实在JS中并没有真正类的概念,传统的OO中对象是类的实例化结果,而JS是基于原型的语言,通过原型复制对象。
JS中的new方法本质其实是一个复制的过程主要做了三件事情

 

var obj  = {};

obj.__proto__ = Base.prototype;

Base.call(obj);


(1)初始化一个对象
(2)将对象的原型链指向Base的原型链
(3)将Base的上下文(this指针)赋给obj
通过以上三个过程就实现了将Base完全复制给了OBJ这个对象,最后返回

© 著作权归作者所有

共有 人打赏支持
mifans
粉丝 9
博文 202
码字总数 102200
作品 0
海淀
程序员
nodejs __proto__跟prototype

前言 nodejs中完全没有class的这个概念,这点跟PHP,JAVA等面向对象的语言很不一样,没有class跟object的区分,那么nodejs是怎么样实现继承的呢? 对象 对象是由属性跟方法组成的一个东西,就...

Ai5tbb
06/25
0
0
Chrome V8 与 Node.js

从某种意义上来说,Node.js 并不是一个从零开始编写的 JavaScript 运行时,它其实也是站在“巨人的肩膀”上进行了一系列的拼凑和封装得到的结果。它的高效离不开一些很牛的第三方程序和类库。...

博文视点
06/14
0
0
[Node.js源码解读(1)]Node.js的启动过程

本文原载于https://github.com/DavidCai1993/my-blog/issues/26 经原作者授权连载于alinode官方博客,未经原作者允许,不得转载。 大家可能会好奇,在 Node.js 启动后,第一个执行的 JavaSc...

_朴灵_
05/14
0
0
Node.js 的 SQLite 教程

在本教程中,我将演示如何结合sqlite3 Node.js驱动程序在Node.js环境中使用SQLite。 对于那些不熟悉SQLite的人来说,它是一个简单的单文件关系数据库,在智能设备,嵌入式系统甚至小型Web应用...

oschina
05/31
0
0
Node.js---03、node.js 的事件(仅四行关键代码)以及应用实例

一、自定义事件的基本步骤 1、加载 events 事件对象(const EventEmitter = require('events')); 2、创建事件存储容器(let emitter = new EventEmitter( )); 3、注册绑定事件(emitter...

秋季长青
2017/11/07
0
0
深入浅出Node.js(三):深入Node.js的模块机制

Node.js模块的实现 之前在网上查阅了许多介绍Node.js的文章,可惜对于Node.js的模块机制大都着墨不多。在后续介绍模块的使用之前,我认为有必要深入一下Node.js的模块机制。 CommonJS规范 早...

leeldy
2012/10/25
0
0
深入浅出Node.js(四):Node.js的事件机制

Node.js的事件机制 Node.js在其Github代码仓库(https://github.com/joyent/node)上有着一句短短的介绍:Evented I/O for V8 JavaScript。这句近似广告语的句子却道尽了Node.js自身的特色所...

leeldy
2012/10/25
0
0
【转】nodejs 如何实现一个简单的插件扩展

为什么需要插件扩展? 模块化思想 任何一个易用的系统都强调易用,易维护,模块化是 nodejs 的核心思想(显然并不是 nodejs 首先提出的); nodejs 有很多优秀的 package 都支持插件式开发:...

HAVENT
07/09
0
0
Node.js---01、初识NodeJS和Node.js的HTTP服务器搭建

一、前言 我们先从以下几个方面在大体上认识一下Node.js: Node.js 是什么?==> 运行环境 是一个 可以运行 并加载 ES语法的 脚本运行环境 JS(ES5)、ES6、Common.js 语法 …… Node.js 可以加...

秋季长青
2017/11/06
0
0
Nodejs express、html5实现拖拽上传

Nodejs express、html5实现拖拽上传 一、前言 文件上传是一个比较常见的功能,传统的选择方式的上传比较麻烦,需要先点击上传按钮,然后再找到文件的路径,然后上传。给用户体验带来很大问题...

james_laughing
2015/06/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

vue组件及路由理论知识

一、 组件component 1. 什么是组件? 组件(Component)是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码组件是自定义元素(对象) 2. 定义组件的方式 方式1:先创建...

一个yuanbeth
1分钟前
0
0
Saltstack配置之 nodegroups

#cd /etc/salt #mkdir master.d #vim node.conf //按组写入文件 nodegroups: client_all: 'L@192.168._._,192.168._._' clienta: 'L@192.168.192._' clientb: 'L@192.168.192._' #/etc/init......

硅谷课堂
8分钟前
0
0
expect(spawn) 自动化git提交和scp拷贝---centos(linux)

**在进行SCP文件拷贝中,往往需要进行用户密码的输入,即用户交互。若采用自动化脚本的方式进行,则可用以下方式: ** #!/usr/bin/expect #设置参数 set src [lindex $argv 0] set dest [lin...

helplove
11分钟前
1
0
用Build来构建对象的写法

如果一个类的属性过多,用构造器来构建对象很难写,因此我们时用Build方式来构建对象。写法大致如下。 import java.io.Serializable;import java.util.Date;public class Log impleme...

算法之名
14分钟前
11
0
利用 acme.sh 获取网站证书并配置https访问

acme.sh 实现了 acme 协议, 可以从 letsencrypt 生成免费的证书.(https://github.com/Neilpang/acme.sh/wiki/%E8%AF%B4%E6%98%8E) 主要步骤: 安装 acme.sh 生成证书 copy 证书到 nginx/ap...

haoyuehong
27分钟前
2
0
微擎框架内如何根据media_id获取到微信图片的路径

微擎的框架内,图片选择后,获取的是那个字符串是media_id,相当于你这张图片在微信的图片服务器里面的id 要求是:获取https://mmbiz.qpic.cn/mmbiz_jpg/…… 微信图片的路径 而微信并没有根据m...

老bia同学
31分钟前
2
0
Spring boot中日期的json格式化

Model 在model层中,类的日期属性上面添加如下注解: @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd hh:mm:ss") 参考 Jackson Date格式化教程...

亚林瓜子
32分钟前
2
0
Eclipse:Failed to load the JNI shared library

1.问题背景: 由于我之前使用jdk1.9学习,当使用Luke的时候发现jdk版本过高,需要向下配置jdk,就向朋友拷了一个安装包。重新配置路径后,便开始报错。 2.问题描述: Failed to load the JNI...

tinder_boy
35分钟前
1
0
少儿学习编程课程是否真的适合七八岁的低龄儿童[图]

少儿学习编程课程是否真的适合七八岁的低龄儿童[图]: 天下熙熙皆为利来,天下攘攘皆为利往。 这几年来,乐高教育机构在国内如同雨后春笋般出现,当然关闭/转手的也很多。从教师角度来看,部...

原创小博客
40分钟前
1
0
ES12-词项查询

1.词项查询介绍 全文查询将在执行之前分析查询字符串,但词项级别查询将按照存储在倒排索引中的词项进行精确操作。这些查询通常用于数字,日期和枚举等结构化数据,而不是全文本字段。 或者,...

贾峰uk
48分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部