位置: 编程技术 - 正文

Nodejs学习笔记之入门篇(nodejs实战)

编辑:rootadmin

推荐整理分享Nodejs学习笔记之入门篇(nodejs实战),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:nodejs 书,nodejs使用视频教程,nodejs使用视频教程,nodejs使用视频教程,nodejs基础知识,nodejs实战教程,nodejs入门教程,nodejs实战教程,内容如对您有帮助,希望把文章链接给更多的朋友!

分享第一篇,关于 NodeJS —— Javascript 的常用知识以及如何从 Javascript 开发者过渡到 NodeJS 开发者(不会介绍具体的框架)。在读本文前,希望你对 javascript 有一些初步的认识。

Javascript 是一门原型模型的解释型语言。解释型将在后面的 NodeJS 里面讨论,原型链是 ES6 之前的 Javascript 的面向对象的实现方式之一,在 ES6 中支持的 class 增加了一种新的实现方式。在 Javascript 里面所有东西都是对象,包括 “类”。接触过 ruby/python 的元编程的可能会觉得这个很熟悉,Javascript 也很容易是实现出动态的生成类的方法。

1. 基于原型链实现的简单的“类”

提一些常见的规范,例如 Javascript 中所有的方法都是驼峰命名,优先使用单引号,两个空格等等,更多的规范可以参考 Person.staticSay来调用。 当上面的 Person 生成实例的时候,例如 var vincent = new Person('vincent');的时候,vincent会自动继承 Person.prototype 的所有方法(代码中的 this 指代的是当前上下文,即上文中的 vincent)。

同时也可以动态的为对象 vincent 添加方法,例如如下代码:

然后当你需要模拟继承的时候,就需要在 prototype 上下功夫。例如下面使用 Worker.prototype = new Person() 来实现,new Person() 返回的实例对象带着的所有方法、属性都被赋给了 prototype,变相模拟了继承。这种方式最终一层层的往上找 prototype 里面的内容(因为每个实例具有的方法都在 prototype 里面,往上直到 Object)。当然也可以通过遍历来进行对 prototype 赋值来模拟继承。

2. 上下文切换

上下文最直观的表现就是代码块中的 this,通常在面向对象的编程中用到,来指代当前“类”生成的对应实例,与其他语言的 self一致。

继续用上文中的例子,上文中已经实现了一个 Person.prototype.sayHi方法,现在我有一个新的对象,代码如下:

如果某天突然异想天开希望这只猫像人一样介绍他自己怎么办,他自己没有 sayHi 这个方法。但是可以通过 console.log(Person.prototype.sayHi)是可以拿到人类的 sayHi 方法的,怎么让猫也可以使用呢?

Javascript 有两个方法,call 和 apply,他们的区别就是参数不同(自行谷歌),作用是用来切换上下文。简单说就是可以把 Person.prototype.sayHi这个函数中的 this 变成其他对象。使用方式: Person.prototype.sayHi.call(c)。

这个实用嘛?例如如下场景:

上面的函数中,通过关键字 arguments获取所有的参数来支持不定数量的参数。现在我们希望对 persons用一些原属于 Array 类型的方法,如何实现呢?这里就可以用上下文切换来实现:

3. 闭包

先来段常见的代码

这个会输出什么结果呢?依次输出 0 1 2 ?实际情况是,当 setTimeout第一次执行回调的时候,for 循环已经结束了,也就是说此时的 i 已经是 3 了,导致最终的输出结果是 3 3 3。

Nodejs学习笔记之入门篇(nodejs实战)

当你需要保护某一个变量,使得他不被外围的代码所影响的时候,你可能就需要考虑下闭包 —— 一个封闭的作用域的代码块。

咦, +是干嘛的,有没有其他方式实现,请自行谷歌。闭包内的 i 的作用域是一个封闭的作用域,所以最终 闭包内的 i 一直没有被外面的执行改变,所以可以成功的输出 0 1 2。

简单的介绍了 javascript 部分特性,关键字 原型链、call 和 apply、arguments 关键字,更多的建议可以看看例如权威指南这样的书,或者快速了解下基本的类型以及每个类型有的方法。有一些比较神奇的代码,例如获得当前的代码的字符串,然后进行处理得到自己想要的内容,使用 getter 和 setter 在用户对对象属性获取或者赋值的时候做一些特殊的操作等等。

4. NodeJS 和 Javascript 的开发区别

这块主要介绍 require 加载的基础知识,首先先介绍一些代码:

当我们执行 node c.js的时候发生了什么?

require是 nodes 关键字,虽然 NodeJS 是以异步著称,但是他的 require都是阻塞的。否则就会出现还没有载入其他模块,已经开始执行下面的代码的情况。

require.resolve()方法是用来找出你所引用的文件的实际路径,找出后 Nodejs 会在 require.cache里面寻找是否有缓存,没有的话则会读取文件然后解析,所以通常情况下,一个 js 文件里面的执行的代码只会在第一次被 require 的时候被执行。(tip. require.cache 如果有需要的话是可以手动删除一些东西的,然后可以某种程度上可以执行多次)

当 b.js 开始执行的时候,他需要先载入 a.js,module.exports告诉 Nodejs 这个文件对外暴露写什么,例如 a.js 暴露的是一个对象,包含 name 属性和 doSomething 方法。然后 b.js 中的 a 变量其实就是这个对象。

执行完获取 a.js 后,继续回到 b.js ,global.a_name 相当于声明了一个全局变量,这个和前端中的 window.a_name = a.name 效果类似。

最终过程完成,c.js 执行输出值。

5. 异步的底层原理

NodeJS 很容易给人一种使用上的错觉,就是写了很久都可能不知道底层的异步是怎么实现的。(下面的理解主要来自于对 python3.4 中的 asyncio 的理解,如有错误欢迎指出)。

NodeJS 底层的 libev 分别在 Window 下使用 IOCP 和 *nix 下使用基于 AIO 的 libeio 来实现异步。通过系统层面的技术,最后达到一个目的,就是应用程序发起一个异步请求,最终在系统执行完后,系统通知应用程序处理完成。在这个过程中,应用程序可以将之前的处理挂起/推入线程池中等待执行,而应用程序在此期间可以执行其他任务。

整个的运行通过系统层面的事件循环来进行运作。例如 Python 提供了类似于 run_until 以及 run_forever 的这样的方法,保证在异步执行之前程序不会结束运行。将整个异步想象成一个一直在运作的车间,车间里面的机器负责查看包裹并盖章这样的操作,工人拿到了一个包裹,然后贴上相应的标签后放进去,等车间处理完后再交还给工人,工人根据包裹上他之前贴上的标签和被车间贴上的标签,进行下一步的处理。工人无需等待包裹检查完毕才能进行下一个,他只需要接受简单处理,然后放入车间进行检查。然后等某个时间车间返回给他某个包裹,他再去进行下一步的操作。

目前主要还是只介绍了一些语言层面的知识,但是只有这些距离开发一个完整的 web 还有一些距离,将在后面继续介绍。包括 Redis,Nginx,测试驱动等等。

以上所述就是本文的全部内容了,希望大家能够喜欢。

Nodejs学习笔记之测试驱动 分享第二章,关于测试驱动。这里的测试主要针对Web后端的测试——你为什么要写测试用例(即测试用例的完善是否是浪费时间),如何完善你的测试

PHP和NodeJs开发的应用如何共用Session 首先了解下session的机制客户端(浏览器中)cookie作为键值,匹配服务器端的一个数据。然后客户端每次在HTTP请求里面带着那个cookie,然后服务器端理所

使用iojs的jsdom库实现同步系统时间 使用iojs的jsdom库与

标签: nodejs实战

本文链接地址:https://www.jiuchutong.com/biancheng/377997.html 转载请保留说明!

上一篇:使用nodejs开发cli项目实例(使用nodejs开发后端)

下一篇:Nodejs学习笔记之测试驱动(nodejs.)

  • 应交地方教育费附加税率是多少
  • 应收账款平均余额公式
  • 信用减值损失是什么类科目
  • 期间费用明细表中的各项税费是指什么
  • 经营范围没广告怎么办
  • 企业组织结构的形式
  • 无形资产摊销是谨慎性原则吗
  • 公司租车怎么抵税
  • 存货验收入库会计分录
  • 企业所得税年报补报
  • 按季度报税怎么处理
  • 小规模企业给别人开16万增值税专用发票
  • 预付款税率是多少
  • 子公司给的股利用交税吗
  • 未分配50g
  • 支付广告费要交增值税吗
  • 对公账号钱怎么拿出来
  • 基金赎回手续费怎么计算
  • 与工程有关的差旅费是否可以计入在建工程呢?
  • 增值税抄税报税流程2021
  • 工会固定资金是什么
  • 生产成本的计算公式是什么
  • 进项税额转出月底如何结转
  • 已经上传的红字怎么修改
  • linux进程管理器
  • 给员工支付的房租怎么算
  • 其他应付款不用付了怎么做分录
  • 基于php实现简单函数
  • 防止盗链的php代码
  • 员工购买住房公积金申请
  • php单态模式简单解释
  • ChatGPT频频发疯!马斯克警告:AI将毁灭人类
  • thinkphp5上传文件
  • 原材料用于在建工程增值税如何处理
  • 联营企业分得的利润
  • dom常用方法
  • 小规模纳税人如何界定
  • 个人所得税换了电脑后,重新录入,离职的人也要录入吗
  • static在c语言中用法
  • 已经提完折旧的房产价值评估
  • 进项税额转出忘记申报咋办
  • 餐饮服务税率是服务类税率还是货物类
  • 损益类科目主要有
  • 增值税包括哪三种类型
  • 固定资产处置需要交税吗?
  • 税金及附加需不需要计提
  • 业务招待费进项税额转出会计分录
  • 长期挂账其他应付款处理
  • 供货方代垫运费计入什么科目
  • 未开票收入如何申报增值税,下个月怎么操作
  • 陪标收费标准
  • 劳务报酬现金流量
  • 质量策划什么意思
  • 报销差旅费用什么收款凭证还是转账凭证
  • 资产处置收益和资产减值损失区别
  • vidaa 破解
  • win2008如何安装telnet
  • solaris挂载硬盘
  • 在windows中创建用户的步骤
  • win7系统有wifi功能吗
  • win7 系统设置
  • winxp怎么做系统
  • 怎么设置开机启动项?
  • win8如何打开开始菜单
  • win7系统开机黑屏只有鼠标且打不开任务管理器
  • 系统干净启动
  • 批处理获取文件夹内文件名
  • Setver、Share、Subst命令的使用方法
  • perl date
  • js实现日历可获得的信息
  • Android Error: No resource found ··· 'layout_above' with value '@id/···
  • js中math.pow
  • 值得收藏的十大收录机
  • Linux bash Shell中的变量类型详解
  • androidui框架
  • javascript调用c语言
  • 知道金额和税额怎么求
  • 关联企业业务往来税收调整
  • 广州市电子税务局怎样跨区申报税务
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设