SlideShare a Scribd company logo
1 of 28
Download to read offline
學好 node.js 
不可不知的事 
Node.js -- 程式設計師的魔術棒 
Ben 
Lue
⼀一切因它⽽而起 
List<Map<String, 
T>> 
list 
= 
new 
ArrayList<Map<String, 
T>>();
Javascript 
Says: 
var 
list 
= 
[];
What 
Is 
Node.js 
(Javascript) 
o A 
script 
language 
o A 
dynamic 
programming 
language 
o Easy 
to 
learn 
o Extremely 
difficult 
to 
master 
o Running 
outside 
of 
the 
browser 
context
So 
This 
Is 
Node.js 
It 
is 
like 
a 
963 
HP 
Ferrari
Javascript 
o Spec: 
ECMAScript 
EdiYon 
5 
o 我們熟知的 Javascript 
事實上是 ECMAScript 
+ 
Host 
Environment. 
o Host 
Environment: 
在 
browser 
上就是 
windows 
物件 
o Host 
Environment: 
在 node.js 
上就是 Node.js 
API,⼀一群內建的模組
Node 
Modules 
o 程式庫?套件?類別(class)? 
o 基本上⼀一個 .js 
檔就能構成⼀一個 module 
o 借助 npm 
的幫忙,⼀一群 
.js 
檔可以擬似⼀一個 
module,並合作完成⾮非常複雜的功能。 
o ⼀一個模組就能夠成⼀一個程式 
o 較複雜的程式需要許多模組來共同完成
Module 
解析 
[The 
require 
secYon] 
[The 
local 
secYon] 
Module 
variables 
& 
Module 
funcYons 
[The 
export 
secYon] 
module.exports 
| 
exports.func_name
Module 
範例⼀一 
var 
h`p 
= 
require('h`p'); 
var 
opYons 
= 
{ 
host: 
'www.google.com', 
port: 
80, 
path: 
'/index.html' 
}; 
h`p.get(opYons, 
funcYon(res) 
{ 
res.setEncoding('ug8'); 
res.on('data', 
funcYon(chunk) 
{ 
console.log( 
chunk 
); 
}); 
}).on('error', 
funcYon(e) 
{ 
console.log('Error 
as: 
%s' 
+ 
e.message); 
});
Module 
範例⼆二 
var 
h`p 
= 
require('h`p'); 
exports.load 
= 
funcYon(opYons, 
callback) 
{ 
h`p.get(opYons, 
funcYon(res) 
{ 
res.setEncoding('ug8'); 
res.on('data', 
funcYon(chunk) 
{ 
callback( 
null, 
chunk 
); 
}); 
}).on('error', 
funcYon(e) 
{ 
callback( 
e 
); 
}); 
}; 
loadAsMod.js
Module 
範例三 
var 
loader 
= 
require(’./loadAsMod'); 
var 
opYons 
= 
{ 
host: 
'www.google.com', 
port: 
80, 
path: 
'/index.html' 
}; 
loader.load(opYons, 
funcYon(err, 
data) 
{ 
if 
(err) 
console.log('Error 
as: 
%s' 
+ 
e.message); 
else 
console.log( 
data 
); 
}); 
useLoad.js
exports 
vs 
module.exports 
o ⼆二者不要同時使⽤用 
o exports.xxx 
公告模組中可使⽤用的函式 
o module.exports 
公告物件 
o module.exports 
如何使⽤用?⾒見下⾴頁範例
攀越 Javascript 
三座⼭山峰(3M) 
o this 
o Implement 
class 
(如何實作類別) 
o callback
Object 
下⾯面三種物件的產⽣生⽅方式有什麼不同? 
o var 
a 
= 
{} 
o var 
b 
= 
Object.create() 
o var 
c 
= 
new 
Claz()
Prototype 
and 
Constructor 
o Constructor: 
物件起始化 
o Prototype: 
當物件找不到屬性時,會沿著 
__proto__ 
chain 
⼀一路找回 
b 
__proto__ 
a 
__proto__
Object.create() 
Object.create(protoObj, 
propObj) 
o 產⽣生⼀一個物件 
o 指定 
prototype 
o empty 
constructor
var 
a 
= 
{} 
相當於 Object.create(Object.prototype) 
o 產⽣生⼀一個物件 
o 指定Object.prototype 
為物件的 prototype 
o empty 
constructor
var 
c 
= 
new 
Claz() 
產⽣生物件時,⽤用 Claz.prototype 
做為物件的 
prototype,並呼叫 Claz() 
來起始物件: 
o var 
c 
= 
Object.create( 
Claz.prototype 
); 
o Claz.call( 
c 
);
以FuncYon實作 Class 
var 
MyClaz 
= 
funcYon(t) 
{ 
var 
Ytle 
= 
t, 
// 
this 
is 
a 
private 
variable 
language 
= 
‘zh’; 
this.getTitle 
= 
funcYon() 
{ 
return 
Ytle; 
}; 
this.getLanguage 
= 
funcYon() 
{ 
return 
language; 
}; 
}; 
var 
o 
= 
new 
MyClaz(‘Hello 
KSDG’); 
console.log(o.getTitle() 
);
夠⽤用,但缺了什麼… 
o 能不能有 
staYc 
的變數? 
o 把函數都直接定義在物件 
(this) 
上,會吃 
掉較多的記憶體和 
CPU 
cycles
仿物件導向的程式樣板 
var 
myClass 
= 
(funcYon() 
{ 
var 
sPrivVar; 
// 
this 
is 
a 
staYc 
private 
variable 
var 
MyClaz 
= 
funcYon() 
{ 
var 
privVar; 
// 
this 
is 
a 
private 
variable 
this.method1 
= 
funcYon() 
{ 
/* 
do 
whatever 
you 
need 
*/ 
}; 
}; 
MyClaz.prototype.method2 
= 
funcYon() 
{ 
/* 
a 
class 
method, 
too 
*/ 
} 
return 
MyClaz; 
})(); 
module.exports 
= 
myClass;
其實這也是 node 模組的寫法 
(funcYon 
(exports, 
require, 
module, 
__filename, 
__dirname) 
{ 
});
繼承⽗父類別 
funcYon 
inherit(cls, 
superCls) 
{ 
// 
不要直接指定 cls.prototype 
= 
new 
superCls 
var 
construct 
= 
funcYon 
() 
{}; 
construct.prototype 
= 
superCls.prototype; 
cls.prototype 
= 
new 
construct; 
cls.prototype.constructor 
= 
cls; 
cls.super 
= 
superCls; 
} 
程式碼取材於 
h`p://stackoverflow.com/quesYons/1114024/constructors-­‐in-­‐javascript-­‐objects
不過… 
o 在 Javascript 
上去模擬物件導向的繼 
承⽅方式是否真的有必要? 
o Prototype 
chain 
本⾝身已有繼承的功能
Object 
Property 
o Object.defineProperty(obj, 
propName, 
descriptors) 
o Descriptors: 
{ 
value: 
”foo", 
writable: 
true, 
enumerable: 
true, 
configurable: 
true 
}
執⾏行和測試 
o node 
o Nodeclipse 
o node-­‐inspector
以 coServ 為範例 
o coServ: 
新世代的 
web 
server 
o 參考資料: 
o h`p://www.slideshare.net/BenLue/web-­‐ 
server-­‐co-­‐serv 
o h`p://www.slideshare.net/BenLue/web-­‐ 
server-­‐coservparYi 
o 利⽤用本地模組做練習 
o Live 
demo
學好 node.js 不可不知的事

More Related Content

What's hot

Node.js從無到有 基本課程
Node.js從無到有 基本課程Node.js從無到有 基本課程
Node.js從無到有 基本課程Simon Su
 
Npm 套件管理 & 常用開發工具介紹
Npm 套件管理 & 常用開發工具介紹Npm 套件管理 & 常用開發工具介紹
Npm 套件管理 & 常用開發工具介紹wantingj
 
Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練Joseph Chiang
 
Nodejs introduce - using Socket.io
Nodejs introduce - using Socket.ioNodejs introduce - using Socket.io
Nodejs introduce - using Socket.ioCaesar Chi
 
Node.js中间件 connect模块深入浅出
Node.js中间件 connect模块深入浅出Node.js中间件 connect模块深入浅出
Node.js中间件 connect模块深入浅出Eric Xiao
 
使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式Will Huang
 
MakerBoard: MT7688 Emulator
MakerBoard: MT7688 EmulatorMakerBoard: MT7688 Emulator
MakerBoard: MT7688 EmulatorFred Chien
 
Getting started with test automation
Getting started with test automationGetting started with test automation
Getting started with test automationIvan Wei
 
Node js实践
Node js实践Node js实践
Node js实践jay li
 
猴子也能懂的Node.js
猴子也能懂的Node.js猴子也能懂的Node.js
猴子也能懂的Node.jsHopenglishRD
 
NodeJS快速服务端开发 朝沐金风 Shanghai
NodeJS快速服务端开发 朝沐金风 ShanghaiNodeJS快速服务端开发 朝沐金风 Shanghai
NodeJS快速服务端开发 朝沐金风 ShanghaiJackson Tian
 
Browser vs. Node.js Jackson Tian Shanghai
Browser vs. Node.js   Jackson Tian ShanghaiBrowser vs. Node.js   Jackson Tian Shanghai
Browser vs. Node.js Jackson Tian ShanghaiJackson Tian
 
北護樂學程式冬令營 2017
北護樂學程式冬令營 2017北護樂學程式冬令營 2017
北護樂學程式冬令營 2017Hamilton Wong
 
五行完成網頁多國語系
五行完成網頁多國語系五行完成網頁多國語系
五行完成網頁多國語系amostsai
 
Node.js长连接开发实践
Node.js长连接开发实践Node.js长连接开发实践
Node.js长连接开发实践longhao
 
2010 08-14 web-sitei18n
2010 08-14 web-sitei18n2010 08-14 web-sitei18n
2010 08-14 web-sitei18ntsunghaolee
 
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoloadjay li
 

What's hot (20)

Node.js從無到有 基本課程
Node.js從無到有 基本課程Node.js從無到有 基本課程
Node.js從無到有 基本課程
 
Npm 套件管理 & 常用開發工具介紹
Npm 套件管理 & 常用開發工具介紹Npm 套件管理 & 常用開發工具介紹
Npm 套件管理 & 常用開發工具介紹
 
Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練Node.js 入門 - 前端工程開發實務訓練
Node.js 入門 - 前端工程開發實務訓練
 
App house
App houseApp house
App house
 
Nodejs introduce - using Socket.io
Nodejs introduce - using Socket.ioNodejs introduce - using Socket.io
Nodejs introduce - using Socket.io
 
Node.js中间件 connect模块深入浅出
Node.js中间件 connect模块深入浅出Node.js中间件 connect模块深入浅出
Node.js中间件 connect模块深入浅出
 
使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式
 
MakerBoard: MT7688 Emulator
MakerBoard: MT7688 EmulatorMakerBoard: MT7688 Emulator
MakerBoard: MT7688 Emulator
 
Getting started with test automation
Getting started with test automationGetting started with test automation
Getting started with test automation
 
Node js实践
Node js实践Node js实践
Node js实践
 
All about NodeJS
All about NodeJSAll about NodeJS
All about NodeJS
 
猴子也能懂的Node.js
猴子也能懂的Node.js猴子也能懂的Node.js
猴子也能懂的Node.js
 
NodeJS快速服务端开发 朝沐金风 Shanghai
NodeJS快速服务端开发 朝沐金风 ShanghaiNodeJS快速服务端开发 朝沐金风 Shanghai
NodeJS快速服务端开发 朝沐金风 Shanghai
 
Browser vs. Node.js Jackson Tian Shanghai
Browser vs. Node.js   Jackson Tian ShanghaiBrowser vs. Node.js   Jackson Tian Shanghai
Browser vs. Node.js Jackson Tian Shanghai
 
全新的Qt5
全新的Qt5全新的Qt5
全新的Qt5
 
北護樂學程式冬令營 2017
北護樂學程式冬令營 2017北護樂學程式冬令營 2017
北護樂學程式冬令營 2017
 
五行完成網頁多國語系
五行完成網頁多國語系五行完成網頁多國語系
五行完成網頁多國語系
 
Node.js长连接开发实践
Node.js长连接开发实践Node.js长连接开发实践
Node.js长连接开发实践
 
2010 08-14 web-sitei18n
2010 08-14 web-sitei18n2010 08-14 web-sitei18n
2010 08-14 web-sitei18n
 
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoload
 

Viewers also liked

我編譯故我在:誰說 Node.js 程式不能編成 binary
我編譯故我在:誰說 Node.js 程式不能編成 binary我編譯故我在:誰說 Node.js 程式不能編成 binary
我編譯故我在:誰說 Node.js 程式不能編成 binaryFred Chien
 
Learning React - I
Learning React - ILearning React - I
Learning React - IMitch Chen
 
Stem is JavaScript OS
Stem is JavaScript OSStem is JavaScript OS
Stem is JavaScript OSFred Chien
 
Programming can be like circuits drawing -- a JSON-FP perspective
Programming can be like circuits drawing -- a JSON-FP perspectiveProgramming can be like circuits drawing -- a JSON-FP perspective
Programming can be like circuits drawing -- a JSON-FP perspectiveBen Lue
 
以HTML5和COIMOTION打造跨平台App
以HTML5和COIMOTION打造跨平台App以HTML5和COIMOTION打造跨平台App
以HTML5和COIMOTION打造跨平台AppBen Lue
 
Brig:Node.js + QML 華麗大冒險
Brig:Node.js + QML 華麗大冒險Brig:Node.js + QML 華麗大冒險
Brig:Node.js + QML 華麗大冒險Fred Chien
 
ما أجمل هذه القصيدة إقرأوها كاملة بقلب حاضر
ما أجمل هذه القصيدة إقرأوها كاملة بقلب حاضرما أجمل هذه القصيدة إقرأوها كاملة بقلب حاضر
ما أجمل هذه القصيدة إقرأوها كاملة بقلب حاضرAlsharifah Alsharif
 
첫눈에 난 내사람 이란걸 알았조 Final
첫눈에 난 내사람 이란걸 알았조 Final첫눈에 난 내사람 이란걸 알았조 Final
첫눈에 난 내사람 이란걸 알았조 Finalenfkclzk00
 
21 Yüzyılda Bilginin Gücü - Kısa bir özet...
21 Yüzyılda Bilginin Gücü - Kısa bir özet...21 Yüzyılda Bilginin Gücü - Kısa bir özet...
21 Yüzyılda Bilginin Gücü - Kısa bir özet...Gelecek Hane
 
Increasing grant funding by improving relationships with grantors
Increasing grant funding by improving relationships with grantorsIncreasing grant funding by improving relationships with grantors
Increasing grant funding by improving relationships with grantorsDiane Leonard, GPC
 
Романюк Площадка сбора мусора
Романюк Площадка сбора мусораРоманюк Площадка сбора мусора
Романюк Площадка сбора мусораsprojectdp
 

Viewers also liked (19)

我編譯故我在:誰說 Node.js 程式不能編成 binary
我編譯故我在:誰說 Node.js 程式不能編成 binary我編譯故我在:誰說 Node.js 程式不能編成 binary
我編譯故我在:誰說 Node.js 程式不能編成 binary
 
Learning React - I
Learning React - ILearning React - I
Learning React - I
 
Stem is JavaScript OS
Stem is JavaScript OSStem is JavaScript OS
Stem is JavaScript OS
 
Programming can be like circuits drawing -- a JSON-FP perspective
Programming can be like circuits drawing -- a JSON-FP perspectiveProgramming can be like circuits drawing -- a JSON-FP perspective
Programming can be like circuits drawing -- a JSON-FP perspective
 
以HTML5和COIMOTION打造跨平台App
以HTML5和COIMOTION打造跨平台App以HTML5和COIMOTION打造跨平台App
以HTML5和COIMOTION打造跨平台App
 
QML + Node.js
QML + Node.jsQML + Node.js
QML + Node.js
 
Brig:Node.js + QML 華麗大冒險
Brig:Node.js + QML 華麗大冒險Brig:Node.js + QML 華麗大冒險
Brig:Node.js + QML 華麗大冒險
 
ما أجمل هذه القصيدة إقرأوها كاملة بقلب حاضر
ما أجمل هذه القصيدة إقرأوها كاملة بقلب حاضرما أجمل هذه القصيدة إقرأوها كاملة بقلب حاضر
ما أجمل هذه القصيدة إقرأوها كاملة بقلب حاضر
 
Super Bowl Snack Hacks
Super Bowl Snack HacksSuper Bowl Snack Hacks
Super Bowl Snack Hacks
 
첫눈에 난 내사람 이란걸 알았조 Final
첫눈에 난 내사람 이란걸 알았조 Final첫눈에 난 내사람 이란걸 알았조 Final
첫눈에 난 내사람 이란걸 알았조 Final
 
Daily treat type 11
Daily treat type 11Daily treat type 11
Daily treat type 11
 
Apple History and Products
Apple History and ProductsApple History and Products
Apple History and Products
 
21 Yüzyılda Bilginin Gücü - Kısa bir özet...
21 Yüzyılda Bilginin Gücü - Kısa bir özet...21 Yüzyılda Bilginin Gücü - Kısa bir özet...
21 Yüzyılda Bilginin Gücü - Kısa bir özet...
 
Increasing grant funding by improving relationships with grantors
Increasing grant funding by improving relationships with grantorsIncreasing grant funding by improving relationships with grantors
Increasing grant funding by improving relationships with grantors
 
Christmas card
Christmas cardChristmas card
Christmas card
 
Discussion (1) (1)
Discussion (1) (1)Discussion (1) (1)
Discussion (1) (1)
 
Pengenalan angka by yaniiii
Pengenalan angka by yaniiiiPengenalan angka by yaniiii
Pengenalan angka by yaniiii
 
Романюк Площадка сбора мусора
Романюк Площадка сбора мусораРоманюк Площадка сбора мусора
Романюк Площадка сбора мусора
 
Capitulo 14
Capitulo 14Capitulo 14
Capitulo 14
 

Similar to 學好 node.js 不可不知的事

180518 ntut js and node
180518 ntut js and node180518 ntut js and node
180518 ntut js and nodePeter Yi
 
JavaScript 教程
JavaScript 教程JavaScript 教程
JavaScript 教程Bobby Zhou
 
Node.js开发体验
Node.js开发体验Node.js开发体验
Node.js开发体验QLeelulu
 
潜力无限的编程语言Javascript
潜力无限的编程语言Javascript潜力无限的编程语言Javascript
潜力无限的编程语言Javascriptjay li
 
JavaScript Advanced Skill
JavaScript Advanced SkillJavaScript Advanced Skill
JavaScript Advanced Skillfirestoke
 
用Jquery实现拖拽层
用Jquery实现拖拽层用Jquery实现拖拽层
用Jquery实现拖拽层yiditushe
 
程式人雜誌 -- 2015 年5月號
程式人雜誌 -- 2015 年5月號程式人雜誌 -- 2015 年5月號
程式人雜誌 -- 2015 年5月號鍾誠 陳鍾誠
 
程式人雜誌 2015年五月
程式人雜誌 2015年五月程式人雜誌 2015年五月
程式人雜誌 2015年五月鍾誠 陳鍾誠
 
PHP Coding Standard and 50+ Programming Skills
PHP Coding Standard and 50+ Programming SkillsPHP Coding Standard and 50+ Programming Skills
PHP Coding Standard and 50+ Programming SkillsHo Kim
 
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7javatwo2011
 
Js的国(转载)
Js的国(转载)Js的国(转载)
Js的国(转载)Leo Hui
 
异步编程与浏览器执行模型
异步编程与浏览器执行模型异步编程与浏览器执行模型
异步编程与浏览器执行模型keelii
 
Talking about exploit writing
Talking about exploit writingTalking about exploit writing
Talking about exploit writingsbha0909
 
Javascript之昨是今非
Javascript之昨是今非Javascript之昨是今非
Javascript之昨是今非Tony Deng
 
Java华为面试题
Java华为面试题Java华为面试题
Java华为面试题yiditushe
 
Java Script 引擎技术
Java Script 引擎技术Java Script 引擎技术
Java Script 引擎技术bigqiang zou
 
107个常用javascript语句 oss 计算技术 - ossez info of tech
107个常用javascript语句   oss 计算技术 - ossez info of tech107个常用javascript语句   oss 计算技术 - ossez info of tech
107个常用javascript语句 oss 计算技术 - ossez info of techYUCHENG HU
 
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)Will Huang
 
D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版Jackson Tian
 

Similar to 學好 node.js 不可不知的事 (20)

180518 ntut js and node
180518 ntut js and node180518 ntut js and node
180518 ntut js and node
 
JavaScript 教程
JavaScript 教程JavaScript 教程
JavaScript 教程
 
Node.js开发体验
Node.js开发体验Node.js开发体验
Node.js开发体验
 
潜力无限的编程语言Javascript
潜力无限的编程语言Javascript潜力无限的编程语言Javascript
潜力无限的编程语言Javascript
 
JavaScript Advanced Skill
JavaScript Advanced SkillJavaScript Advanced Skill
JavaScript Advanced Skill
 
用Jquery实现拖拽层
用Jquery实现拖拽层用Jquery实现拖拽层
用Jquery实现拖拽层
 
程式人雜誌 -- 2015 年5月號
程式人雜誌 -- 2015 年5月號程式人雜誌 -- 2015 年5月號
程式人雜誌 -- 2015 年5月號
 
程式人雜誌 2015年五月
程式人雜誌 2015年五月程式人雜誌 2015年五月
程式人雜誌 2015年五月
 
PHP Coding Standard and 50+ Programming Skills
PHP Coding Standard and 50+ Programming SkillsPHP Coding Standard and 50+ Programming Skills
PHP Coding Standard and 50+ Programming Skills
 
千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7千呼萬喚始出來的Java SE 7
千呼萬喚始出來的Java SE 7
 
Js的国(转载)
Js的国(转载)Js的国(转载)
Js的国(转载)
 
异步编程与浏览器执行模型
异步编程与浏览器执行模型异步编程与浏览器执行模型
异步编程与浏览器执行模型
 
Talking about exploit writing
Talking about exploit writingTalking about exploit writing
Talking about exploit writing
 
Javascript之昨是今非
Javascript之昨是今非Javascript之昨是今非
Javascript之昨是今非
 
JS2
JS2JS2
JS2
 
Java华为面试题
Java华为面试题Java华为面试题
Java华为面试题
 
Java Script 引擎技术
Java Script 引擎技术Java Script 引擎技术
Java Script 引擎技术
 
107个常用javascript语句 oss 计算技术 - ossez info of tech
107个常用javascript语句   oss 计算技术 - ossez info of tech107个常用javascript语句   oss 计算技术 - ossez info of tech
107个常用javascript语句 oss 计算技术 - ossez info of tech
 
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
JavaScript 物件導向觀念入門 v.s. TypeScript 開發實戰 (微軟實戰課程日)
 
D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版D2_node在淘宝的应用实践_pdf版
D2_node在淘宝的应用实践_pdf版
 

More from Ben Lue

Introducing coServ
Introducing coServIntroducing coServ
Introducing coServBen Lue
 
What is JSON-FP
What is JSON-FPWhat is JSON-FP
What is JSON-FPBen Lue
 
Hack & Go! Redefining API @ MOPCON 2014
Hack & Go!  Redefining API @ MOPCON 2014Hack & Go!  Redefining API @ MOPCON 2014
Hack & Go! Redefining API @ MOPCON 2014Ben Lue
 
不一樣的 Web Server coServ Part II
不一樣的 Web Server coServ Part II不一樣的 Web Server coServ Part II
不一樣的 Web Server coServ Part IIBen Lue
 
HTML+COIMOTION 開發跨平台 app
HTML+COIMOTION 開發跨平台 appHTML+COIMOTION 開發跨平台 app
HTML+COIMOTION 開發跨平台 appBen Lue
 
第一次使用COIMOTION就上手
第一次使用COIMOTION就上手第一次使用COIMOTION就上手
第一次使用COIMOTION就上手Ben Lue
 
COIMOTION概念介紹
COIMOTION概念介紹COIMOTION概念介紹
COIMOTION概念介紹Ben Lue
 

More from Ben Lue (7)

Introducing coServ
Introducing coServIntroducing coServ
Introducing coServ
 
What is JSON-FP
What is JSON-FPWhat is JSON-FP
What is JSON-FP
 
Hack & Go! Redefining API @ MOPCON 2014
Hack & Go!  Redefining API @ MOPCON 2014Hack & Go!  Redefining API @ MOPCON 2014
Hack & Go! Redefining API @ MOPCON 2014
 
不一樣的 Web Server coServ Part II
不一樣的 Web Server coServ Part II不一樣的 Web Server coServ Part II
不一樣的 Web Server coServ Part II
 
HTML+COIMOTION 開發跨平台 app
HTML+COIMOTION 開發跨平台 appHTML+COIMOTION 開發跨平台 app
HTML+COIMOTION 開發跨平台 app
 
第一次使用COIMOTION就上手
第一次使用COIMOTION就上手第一次使用COIMOTION就上手
第一次使用COIMOTION就上手
 
COIMOTION概念介紹
COIMOTION概念介紹COIMOTION概念介紹
COIMOTION概念介紹
 

學好 node.js 不可不知的事

  • 1. 學好 node.js 不可不知的事 Node.js -- 程式設計師的魔術棒 Ben Lue
  • 2. ⼀一切因它⽽而起 List<Map<String, T>> list = new ArrayList<Map<String, T>>();
  • 3. Javascript Says: var list = [];
  • 4. What Is Node.js (Javascript) o A script language o A dynamic programming language o Easy to learn o Extremely difficult to master o Running outside of the browser context
  • 5. So This Is Node.js It is like a 963 HP Ferrari
  • 6. Javascript o Spec: ECMAScript EdiYon 5 o 我們熟知的 Javascript 事實上是 ECMAScript + Host Environment. o Host Environment: 在 browser 上就是 windows 物件 o Host Environment: 在 node.js 上就是 Node.js API,⼀一群內建的模組
  • 7. Node Modules o 程式庫?套件?類別(class)? o 基本上⼀一個 .js 檔就能構成⼀一個 module o 借助 npm 的幫忙,⼀一群 .js 檔可以擬似⼀一個 module,並合作完成⾮非常複雜的功能。 o ⼀一個模組就能夠成⼀一個程式 o 較複雜的程式需要許多模組來共同完成
  • 8. Module 解析 [The require secYon] [The local secYon] Module variables & Module funcYons [The export secYon] module.exports | exports.func_name
  • 9. Module 範例⼀一 var h`p = require('h`p'); var opYons = { host: 'www.google.com', port: 80, path: '/index.html' }; h`p.get(opYons, funcYon(res) { res.setEncoding('ug8'); res.on('data', funcYon(chunk) { console.log( chunk ); }); }).on('error', funcYon(e) { console.log('Error as: %s' + e.message); });
  • 10. Module 範例⼆二 var h`p = require('h`p'); exports.load = funcYon(opYons, callback) { h`p.get(opYons, funcYon(res) { res.setEncoding('ug8'); res.on('data', funcYon(chunk) { callback( null, chunk ); }); }).on('error', funcYon(e) { callback( e ); }); }; loadAsMod.js
  • 11. Module 範例三 var loader = require(’./loadAsMod'); var opYons = { host: 'www.google.com', port: 80, path: '/index.html' }; loader.load(opYons, funcYon(err, data) { if (err) console.log('Error as: %s' + e.message); else console.log( data ); }); useLoad.js
  • 12. exports vs module.exports o ⼆二者不要同時使⽤用 o exports.xxx 公告模組中可使⽤用的函式 o module.exports 公告物件 o module.exports 如何使⽤用?⾒見下⾴頁範例
  • 13. 攀越 Javascript 三座⼭山峰(3M) o this o Implement class (如何實作類別) o callback
  • 14. Object 下⾯面三種物件的產⽣生⽅方式有什麼不同? o var a = {} o var b = Object.create() o var c = new Claz()
  • 15. Prototype and Constructor o Constructor: 物件起始化 o Prototype: 當物件找不到屬性時,會沿著 __proto__ chain ⼀一路找回 b __proto__ a __proto__
  • 16. Object.create() Object.create(protoObj, propObj) o 產⽣生⼀一個物件 o 指定 prototype o empty constructor
  • 17. var a = {} 相當於 Object.create(Object.prototype) o 產⽣生⼀一個物件 o 指定Object.prototype 為物件的 prototype o empty constructor
  • 18. var c = new Claz() 產⽣生物件時,⽤用 Claz.prototype 做為物件的 prototype,並呼叫 Claz() 來起始物件: o var c = Object.create( Claz.prototype ); o Claz.call( c );
  • 19. 以FuncYon實作 Class var MyClaz = funcYon(t) { var Ytle = t, // this is a private variable language = ‘zh’; this.getTitle = funcYon() { return Ytle; }; this.getLanguage = funcYon() { return language; }; }; var o = new MyClaz(‘Hello KSDG’); console.log(o.getTitle() );
  • 20. 夠⽤用,但缺了什麼… o 能不能有 staYc 的變數? o 把函數都直接定義在物件 (this) 上,會吃 掉較多的記憶體和 CPU cycles
  • 21. 仿物件導向的程式樣板 var myClass = (funcYon() { var sPrivVar; // this is a staYc private variable var MyClaz = funcYon() { var privVar; // this is a private variable this.method1 = funcYon() { /* do whatever you need */ }; }; MyClaz.prototype.method2 = funcYon() { /* a class method, too */ } return MyClaz; })(); module.exports = myClass;
  • 22. 其實這也是 node 模組的寫法 (funcYon (exports, require, module, __filename, __dirname) { });
  • 23. 繼承⽗父類別 funcYon inherit(cls, superCls) { // 不要直接指定 cls.prototype = new superCls var construct = funcYon () {}; construct.prototype = superCls.prototype; cls.prototype = new construct; cls.prototype.constructor = cls; cls.super = superCls; } 程式碼取材於 h`p://stackoverflow.com/quesYons/1114024/constructors-­‐in-­‐javascript-­‐objects
  • 24. 不過… o 在 Javascript 上去模擬物件導向的繼 承⽅方式是否真的有必要? o Prototype chain 本⾝身已有繼承的功能
  • 25. Object Property o Object.defineProperty(obj, propName, descriptors) o Descriptors: { value: ”foo", writable: true, enumerable: true, configurable: true }
  • 26. 執⾏行和測試 o node o Nodeclipse o node-­‐inspector
  • 27. 以 coServ 為範例 o coServ: 新世代的 web server o 參考資料: o h`p://www.slideshare.net/BenLue/web-­‐ server-­‐co-­‐serv o h`p://www.slideshare.net/BenLue/web-­‐ server-­‐coservparYi o 利⽤用本地模組做練習 o Live demo