ES6类在ExpressJS中表现不同?

时间:2016-07-17 07:18:21

标签: javascript node.js express ecmascript-6

为什么一个类在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 {}

2 个答案:

答案 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函数,这将是多边形。