我有一個開始作爲ES5.1的一個項目,後來我改成了支持ES6所以我是用異步的await,讓...實例
現在我需要具有類似於實例的模塊/對象。
我發現this文章,解釋的過程,但...
當我這樣做:
'use strict';
let _ = require('lodash');
var mappings;
function SafeRequestHandler(reqMappings) {
if (!(this instanceof SafeRequestHandler)) {
return new SafeRequestHandler((reqMappings));
}
mappings = reqMappings;
}
function safeHandleReq(req, res) {
try {
let pair = _.find(mappings, {'url': req.url});
return pair.handler(req, res);
} catch (err) {
console.log(err);
}
}
SafeRequestHandler.prototype.safe = safeHandleReq;
module.exports = SafeRequestHandler;
但現在,每次我這樣做:
var handler = require('../util/safeRequestHandler');
let handlerMappings = [
{
url: def.party_create,
handler: partyCreate
},
{
url: def.party_modify,
handler: partyModify
},
{
url: def.party_get,
handler: partyGet
}
];
var handle = new handler(handlerMappings).safe;
我得到this.mappings
REPLACED在SafeRequestHandler
例如。這不是一個實例。
所以我試圖ES6方法定義處理程序:
'use strict';
let _ = require('lodash');
class SafeRequestHandler {
constructor(reqMappings) {
this.mappings = reqMappings;
}
safeHandleReq(req, res) {
try {
let pair = _.find(this.mappings, {'url': req.url});
return pair.handler(req, res);
} catch (err) {
console.log(err);
}
}
}
並創建實例,如:
let handlerMappings = [
{
url: def.party_create,
handler: partyCreate
},
{
url: def.party_modify,
handler: partyModify
},
{
url: def.party_get,
handler: partyGet
}
];
let handle = new SafeRequestHandler(handlerMappings).safeHandleReq;
..但這種方式在safeHandleReq(...)
我甚至不能伸手mappings
。 this
是undefined,mappings
是undefined
我想我只是不完全瞭解基本原理,所以能否請您正確&解釋這兩種方法有什麼問題?
謝謝!
否ES6方式應該正常工作。 –
好吧,正如我所說..我無法達到'映射'一切都是未定義的 – greengold
不,它很好。你會得到什麼錯誤? –