ExpressJS中的ES6类有不同的performance?

为什么一个类在ExpressJS中有不同的performance? 举个例子:

随着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); 

没有expression

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); undefined在expressjs中返回Polygon {}

在第二个代码片段中, log函数被称为p对象的成员,这就是为什么this是指对象。 在第一个代码片段中,情况并非如此,因为您正在将该方法传递给另一个函数,并且该方法与该对象分离 。 你可以使用bind方法明确地设置this值:

 app.get('/input/:publicKey', polygon.log.bind(polygon)); 

在第一种情况下,你直接传递函数,因此你不会得到这个多边形对象

使用

 app.get('/input/:publicKey', polygon.log.bind(polygon)); 

在第二种情况下,你正在使用

 p.log('world') 

这里的日志function将被调用,这将是多边形。