溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Node.js新手必須知道的4個JavaScript概念

發(fā)布時間:2020-08-04 16:26:58 來源:網(wǎng)絡(luò) 閱讀:218 作者:Hjiangxue 欄目:web開發(fā)

如果只需要知道一種編程語言就可以構(gòu)建一個全棧的應(yīng)用程序,是不是特別了不起?Ryan Dahl為了把這個想法成為現(xiàn)實,創(chuàng)造了node.js。Node.js是建立在Chrome強勁的V8 JavaScript引擎上的服務(wù)器端框架。雖然最初是用C++編寫的,但是應(yīng)用程序通過JavaScript運行。

這樣一來,問題就解決了。一種語言就可以統(tǒng)治一切。而且,在整個應(yīng)用程序中你只需要使用這一種語言。所以,我們需要深刻了解node.js。這就是本文的主題。

下面這四個基本概念是你想要掌握node.js所必需的。我會盡可能長話短說向大家介紹它們。

Node.js新手必須知道的4個JavaScript概念

1.非阻塞或異步I/O

由于Node.js是一種服務(wù)器端框架,所以它的一個主要工作就是處理瀏覽器請求。在傳統(tǒng)的I/O系統(tǒng)中,當前請求只有當先前請求的響應(yīng)(HTML頁面)已到達才會發(fā)出。這就是為什么它被稱為阻塞I/O。服務(wù)器阻塞其他請求是為了處理當前的請求,而這會導(dǎo)致瀏覽器的等待。

Node.js不遵循I/O的這個原則。如果一個請求需要花費較長時間,那么Node.js會發(fā)送請求到事件循環(huán)(event loop)中,并繼續(xù)在調(diào)用棧(call stack)中處理下一個請求。一旦未決請求完成處理,它就會告訴Node.js,并將響應(yīng)渲染在瀏覽器上。

用一個虛擬的例子來理解這一點:

阻塞I / O

// take order for table 1 and wait...
var order1 = orderBlocking(['Coke', 'Iced Tea']);
// once order is ready, take order back to table.
serveOrder(order1);
// once order is delivered, move on to another table.
// take order for table 2 and wait...
var order2 = orderBlocking(['Coke', 'Water']);
// once order is ready, take order back to table.
serveOrder(order2);
// once order is delivered, move on to another table.
// take order for table 3 and wait...
var order3 = orderBlocking(['Iced Tea', 'Water']);
// once order is ready, take order back to table.
serveOrder(order3);
// once order is delivered, move on to another table.

在這個餐廳例子中,服務(wù)員給出菜單,等待訂單完成,然后再回到餐桌根據(jù)菜單上菜。在當前客戶點菜時,服務(wù)員就在旁邊等待,不接受其他客戶的菜單。

非阻塞I / O

// take order for table 1 and move on...
orderNonBlocking(['Coke', 'Iced Tea'], function(drinks){
  return serveOrder(drinks);
});
// take order for table 2 and move on...
orderNonBlocking(['Beer', 'Whiskey'], function(drinks){
  return serveOrder(drinks);
});
// take order for table 3 and move on...
orderNonBlocking(['Hamburger', 'Pizza'], function(food){
  return serveOrder(food);
});

在這個例子中,服務(wù)員獲得菜單,并告知廚師,然后返回取另一份菜單。在完成第一個菜單進程中,他既按照順序給當前顧客上菜,也接受來自其他客戶的點單。服務(wù)員不會因為阻塞來自于其他客戶的點菜而浪費時間。

2.原型

原型是JavaScript的一個復(fù)雜概念。不過因為在Node.js中你要多次用到原型,所以每個JavaScript開發(fā)人員都必須了解這個概念。

在實現(xiàn)經(jīng)典繼承的語言中,例如Java,或C ++,對于以代碼重用為目的的語言,你首先必須寫一個類,然后從該類創(chuàng)建對象或擴展該類。但是,在JavaScript中不存在類的概念。首先在JavaScript中創(chuàng)建一個對象,然后從這個對象中增加自己的對象,或創(chuàng)建新的對象。這就是所謂的原型傳承和通過原型的實現(xiàn)。

每個JavaScript對象被鏈接到一個來自于它可以繼承屬性的原型對象。原型類似其他OO語言中的類,但不同的是,它們本身也是對象。每一個對象都鏈接到Object.prototype,而Object.prototype自帶JavaScript預(yù)定義。

如果你通過obj.propName或 obj['propName'] 查找屬性,而對象并不具有可通過 obj.hasOwnProperty(‘propName’)被檢查的屬性,那么JavaScript的運行時會在其原型對象中查找屬性。如果原型對象也沒有這樣的屬性,那么依次檢查它的原型,直到找到匹配,或者到達Object.prototype。如果該屬性不存在原型鏈,那么它會導(dǎo)致一個未定義的值。

本次給大家推薦一個免費的學習圈,里面概括移動應(yīng)用網(wǎng)站開發(fā),css,html,webpack,vue node angular以及面試資源等。**獲取資料

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI