成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

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

antz / 3046人閱讀

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

1.循環(huán)問(wèn)題

當(dāng)循環(huán)調(diào)用 require() 時(shí),一個(gè)模塊可能在未完成執(zhí)行時(shí)被返回。
例如以下情況:
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 開(kāi)始");
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 開(kāi)始");
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 時(shí),a.js 又加載 b.js。 此時(shí),b.js 會(huì)嘗試去加載 a.js。 為了防止無(wú)限的循環(huán),會(huì)返回一個(gè) a.js 的 exports 對(duì)象的 未完成的副本 給 b.js 模塊。 然后 b.js 完成加載,并將 exports 對(duì)象提供給 a.js 模塊。
當(dāng) main.js 加載這兩個(gè)模塊時(shí),它們都已經(jīng)完成加載。 因此,該程序的輸出會(huì)是:
$ node main.js

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

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

2.原型繼承問(wèn)題

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

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

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

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

superConstructor 可通過(guò) constructor.super_ 屬性訪(fǎng)問(wèn)。

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("運(yùn)作良好!"); // 接收的數(shù)據(jù):"運(yùn)作良好!"

例子:使用 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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/95994.html

相關(guān)文章

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

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

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

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

    Shonim 評(píng)論0 收藏0
  • 《夢(mèng)幻模擬戰(zhàn)》漏洞挖掘全過(guò)程

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

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

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

    zhaochunqi 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<