Event Emitterを用いてモジュールを作成しました。
下記コードのときはうまくいくのですが、11行目あたりを
JSCafe.prototype.request = function (url) {
から
JSCafe.prototype.request = (url)=>{
に変えると
self.emit('end', buffer);
^
TypeError: self.emit is not a function
というエラーが出てしまいます。
アロー関数にすることによってthis の値を語彙的に束縛しているのかと予想したのですが
具体的にどこが、どのように値が変わり、なぜエラーが出たのかを教えていただきたいです。
また、他の部分に原因があった場合や私が勘違いしていることが原因である場合、そちらも教えていただければ幸いです。
JavaScript
1const https = require('https'); 2const emitter = require('events').EventEmitter; 3const util = require('util'); 4 5function JSCafe() { 6 emitter.call(this); 7} 8 9util.inherits(JSCafe, emitter); 10 11JSCafe.prototype.request = function (url) { 12 let self = this; 13 https.get(url, (res) => { 14 res.setEncoding('utf-8'); 15 let buffer = ''; 16 res.on('readable', () => { 17 buffer += res.read(); 18 }); 19 res.on('end', () => { 20 self.emit('end', buffer); 21 }); 22 res.on('error', (e) => { 23 self.emit('error', e); 24 }); 25 }); 26 return self; 27}; 28 29module.exports = JSCafe;
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。