文档章节

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

mifans
 mifans
发布于 2017/02/14 10:25
字数 920
阅读 258
收藏 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
粉丝 10
博文 203
码字总数 102329
作品 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流,这样的打开方式对不对!

Node.js流,这样的打开方式对不对! 俗话说的好:“人往高处走,水往低处流”;古语有云:“落花有意,流水无情”。()哎呀🤣,各位大佬,这点小事用不着惊动二营长的意大利炮了吧,进错频...

亦曾执着过不后悔
08/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

2018资本方向:重新发现社交

2018年可谓是资本寒冬,投资人方面认为今年投资主题较少,大量机构继续项目退出来筹措新一期基金,创业公司上市募资,好让投资人收回资金离场,在如此惨淡的背景下,社交领域的投资却有回暖趋...

ThinkSNS账号
18分钟前
1
0
day118-20181016-英语流利阅读-待学习

耶鲁毕业又如何?美国最高法院大法官被控性侵 雪梨 2018-10-16 1.今日导读 美国最高法院大法官布雷特·卡瓦诺(Brett Kavanaugh)被指涉及 1980 年代多件性侵案,包括克里斯汀·布莱希·福特...

飞鱼说编程
20分钟前
2
0
Android studio取消自动折叠代码

在这里面设置就行

lanyu96
20分钟前
1
0
Magento2后台忘记密码

Magento2后台忘记密码处理方式 第一种(Magento CLI 命令行创建新用户): php bin/magento admin:user:create --admin-user="newName" --admin-password="New-passwd" --admin-email="newN......

alt_tab_jj
21分钟前
1
0
Vue 引入Jquery jQueryRotate.2.2 制作转盘抽奖

原先用jquery做的,现在整合webpack+vue 其实只需要webpack就行了,只是为了方便打包。 1、关闭eslint 检测,如果开启,插件里面全是报错,麻烦的很。 webpack.base.conf.js const createLin...

大灰狼wow
22分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部