为什么一个类在ExpressJS中表现不同?举个例子:
使用expressJS
LIB / Polygon.js:
class Polygon {
log (req, res) {
var publicKey = req.params.publicKey;
var query = req.query;
console.log(this); // undefined
var output = {
publicKey :publicKey,
query: query
};
res.send(output);
}
}
export {Polygon as default}
app.js:
import express from 'express';
import Polygon from './lib/Polygon';
var polygon = new Polygon();
app.get('/input/:publicKey', polygon.log);
没有expressJS
LIB / Polygon.js:
class Polygon {
log(req, res) {
console.log(this); // Polygon {}
}
}
export { Polygon as default}
app.js:
import Polygon from 'Polygon';
var p = new Polygon();
p.log('world')
我怎样才能console.log(this);
未定义在快递中返回Polygon {}
?
答案 0 :(得分:1)
在第二个代码段中,log
函数被称为p
对象的成员,这就是this
引用该对象的原因。在第一个代码片段中不是这种情况,因为您将方法传递给另一个函数,并且该方法是分离来自对象。您可以使用this
方法明确设置bind
值:
app.get('/input/:publicKey', polygon.log.bind(polygon));
答案 1 :(得分:1)
在第一种情况下,您直接传递函数,因此您不会将其作为多边形对象
使用
app.get('/input/:publicKey', polygon.log.bind(polygon));
在第二种情况下,您正在使用
p.log('world')
这里将调用log函数,这将是多边形。