国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【滲透】node.js經(jīng)典問題

antz / 3044人閱讀

摘要:循環(huán)問題當(dāng)循環(huán)調(diào)用時,一個模塊可能在未完成執(zhí)行時被返回。然后完成加載,并將對象提供給模塊。注意,這兩種方式是語義上不兼容的。的原型會被設(shè)置到一個從創(chuàng)建的新對象上??赏ㄟ^屬性訪問。接收的數(shù)據(jù)運作良好接收的數(shù)據(jù)運作良好例子使用的和接收的數(shù)據(jù)使用

1.循環(huán)問題

當(dāng)循環(huán)調(diào)用 require() 時,一個模塊可能在未完成執(zhí)行時被返回。
例如以下情況:
a.js:

exports.done = false;
const b = require("./b.js");
console.log("在 a 中,b.done = %j", b.done);
exports.done = true;
console.log("a 結(jié)束");

b.js:

console.log("b 開始");
exports.done = false;
const a = require("./a.js");
console.log("在 b 中,a.done = %j", a.done);
exports.done = true;
console.log("b 結(jié)束");

main.js:

console.log("main 開始");
const a = require("./a.js");
const b = require("./b.js");
console.log("在 main 中,a.done=%j,b.done=%j", a.done, b.done);

當(dāng) main.js 加載 a.js 時,a.js 又加載 b.js。 此時,b.js 會嘗試去加載 a.js。 為了防止無限的循環(huán),會返回一個 a.js 的 exports 對象的 未完成的副本 給 b.js 模塊。 然后 b.js 完成加載,并將 exports 對象提供給 a.js 模塊。
當(dāng) main.js 加載這兩個模塊時,它們都已經(jīng)完成加載。 因此,該程序的輸出會是:
$ node main.js

main 開始
a 開始
b 開始
在 b 中,a.done = false
b 結(jié)束
在 a 中,b.done = true
a 結(jié)束
在 main 中,a.done=true,b.done=true

需要仔細(xì)的規(guī)劃, 以允許循環(huán)模塊依賴在應(yīng)用程序內(nèi)正常工作.

2.原型繼承問題

需要注意的是call、apply、bind方法都只能繼承對象的方法,卻不能對它們的原型進(jìn)行拷貝或繼承,為此我們一般使用混合的寫法,使用原型鏈和(apply或者call)方法進(jìn)行繼承。
而在nodeJS中,util包提供了一個方法util.inherits(constructor, superConstructor)
所以就得如下,通過結(jié)合使用call和inherits才能將其完全拷貝:

function Girl(name){
    this.name = name;
    EventEmitter.call(this);
}
util.inherits(Girl,EventEmitter);

var girl = new Girl();
注意,不建議使用 util.inherits()。 請使用 ES6 的 class 和 extends 關(guān)鍵詞獲得語言層面的繼承支持。 注意,這兩種方式是語義上不兼容的。

constructor
superConstructor
從一個構(gòu)造函數(shù)中繼承原型方法到另一個。 constructor 的原型會被設(shè)置到一個從 superConstructor 創(chuàng)建的新對象上。

superConstructor 可通過 constructor.super_ 屬性訪問。

const util = require("util");
const EventEmitter = require("events");

function MyStream() {
  EventEmitter.call(this);
}

util.inherits(MyStream, EventEmitter);

MyStream.prototype.write = function(data) {
  this.emit("data", data);
};

const stream = new MyStream();

console.log(stream instanceof EventEmitter); // true
console.log(MyStream.super_ === EventEmitter); // true

stream.on("data", (data) => {
  console.log(`接收的數(shù)據(jù):"${data}"`);
});
stream.write("運作良好!"); // 接收的數(shù)據(jù):"運作良好!"

例子:使用 ES6 的 class 和 extends:

const EventEmitter = require("events");

class MyStream extends EventEmitter {
  write(data) {
    this.emit("data", data);
  }
}

const stream = new MyStream();

stream.on("data", (data) => {
  console.log(`接收的數(shù)據(jù):"${data}"`);
});
stream.write("使用 ES6");


文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/95994.html

相關(guān)文章

  • 滲透node.js經(jīng)典問題

    摘要:循環(huán)問題當(dāng)循環(huán)調(diào)用時,一個模塊可能在未完成執(zhí)行時被返回。然后完成加載,并將對象提供給模塊。注意,這兩種方式是語義上不兼容的。的原型會被設(shè)置到一個從創(chuàng)建的新對象上??赏ㄟ^屬性訪問。接收的數(shù)據(jù)運作良好接收的數(shù)據(jù)運作良好例子使用的和接收的數(shù)據(jù)使用 1.循環(huán)問題 當(dāng)循環(huán)調(diào)用 require() 時,一個模塊可能在未完成執(zhí)行時被返回。例如以下情況:a.js: exports.done = fal...

    zhichangterry 評論0 收藏0
  • JavaScript框架學(xué)習(xí)筆記(一)

    摘要:基本的學(xué)習(xí)思路是跟著框架設(shè)計這本書,甚至可以說是這本書的讀書筆記。也參考很多網(wǎng)上解讀的博客和學(xué)習(xí)資料。當(dāng)然,最重要的資料還是框架的源代碼。后來由于開發(fā)者反對,新興的框架都在命名空間上構(gòu)建。 JavaScript框架學(xué)習(xí)筆記(一) 我為什么要學(xué)習(xí)框架 更深入的理解工具,以后用起來更順手而且也能做一定的工具取舍,學(xué)習(xí)理解新工具也就更快, 對提升js水平也很有幫助,框架有很多解決坑的經(jīng)典思...

    Shonim 評論0 收藏0
  • 《夢幻模擬戰(zhàn)》漏洞挖掘全過程

    摘要:自年月上線至今,夢幻模擬戰(zhàn)手游始終保持在游戲暢銷榜前的位置。夢幻模擬戰(zhàn)的發(fā)行方紫龍游戲,對此類風(fēng)險有著非常超前的認(rèn)知,在產(chǎn)品正式上線前,就與的手游安全團(tuán)隊進(jìn)行對接。 作者:WeTest小編商業(yè)轉(zhuǎn)載請聯(lián)系騰訊WeTest獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。原文鏈接:https://wetest.qq.com/lab/view/429.html WeTest 導(dǎo)讀 漏洞和外掛一直是危害游戲的罪...

    maxmin 評論0 收藏0
  • 滲透】關(guān)于Javascript的函數(shù)聲明和函數(shù)表達(dá)式

    摘要:而函數(shù)表達(dá)式的值是在運行時確定,并且在表達(dá)式賦值完成后,該函數(shù)才能調(diào)用。 Javascript定義函數(shù)有兩種類型 函數(shù)聲明 // 函數(shù)聲明 function wscat(type){ return type===wscat; } 函數(shù)表達(dá)式 // 函數(shù)表達(dá)式 var oaoafly = function(type){ return type===oaoafly; } 先...

    zhaochunqi 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<