文档章节

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

mifans
 mifans
发布于 2017/02/14 10:25
字数 920
阅读 382
收藏 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
粉丝 11
博文 204
码字总数 103669
作品 0
海淀
程序员
私信 提问
nodejs __proto__跟prototype

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

Ai5tbb
2018/06/25
0
0
关于 Node.js: 所有PHP开发人员应该知道的5点

我最近开始和Node.js打交道。以前做PHP开发,特别是Drupal,我发现向Node.js转移很容易,而且过程很愉快!但是我也需要学会从一些不同的角度思考。下面我列出了5项我认为PHP工程师应该知道的...

虫虫
2012/02/07
17.2K
26
Chrome V8 与 Node.js

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

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

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

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

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

oschina
2018/05/31
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

利用神器BTrace 追踪线上 Spring Boot应用运行时信息

概述 生产环境中的服务可能会出现各种问题,但总不能让服务下线来专门排查错误,这时候最好有一些手段来获取程序运行时信息,比如 接口方法参数/返回值、外部调用情况 以及 函数执行时间等信...

CodeSheep
5分钟前
0
0
OSChina 周四乱弹 —— 我想过年请假提前回家两天

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @clouddyy :#每日一歌# 分享王力宏的单曲《爱错》 《爱错》- 王力宏 手机党少年们想听歌,请使劲儿戳(这里) @Caremorele :这几天起床有点...

小小编辑
37分钟前
12
1
Cookie 显示用户上次访问的时间

import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.serv......

gwl_
今天
1
0
网络编程

第14天 网络编程 今日内容介绍  网络通信协议  UDP通信  TCP通信 今日学习目标  能够辨别UDP和TCP协议特点  能够说出UDP协议下两个常用类名称  能够说出TCP协议下两个常用类名称...

stars永恒
今天
2
0
二进制相关

二进制 众所周知计算机使用的是二进制,数字的二进制是如何表示的呢? 实际就是逢二进一。比如 2 用二进制就是 10。那么根据此可以推算出 5的二进制等于 10*10+1 即为 101。 在计算机中,负数以...

NotFound403
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部