ES6模板文字:如何在解释范围之前传递范围?

Dra*_*SAN 4 javascript node.js ecmascript-6

我开始使用模板文字来制作错误生成器.

我有工作代码,但我被迫在constructor范围内声明可能的错误列表,我对此并不满意.

有没有办法复制模板文字而不评估它,所以我可以在正确的范围内评估它?或者将范围传递给模板文字?

工作error.js:

'use strict';

class Error {
    constructor(code) {
        const error = {
            //...
            //API
            1001: 'No token',
            1002: `${arguments[1]}`,
            1003: `${arguments[1]} ! ${arguments[2]}`,
            1004: 'Missing data'
            //...
        };
        let i = 0;
        this.code = code;
        this.error = error[code];
        //...
    }
}

// export default Error;
module.exports = Error;
Run Code Online (Sandbox Code Playgroud)

被称为:

'use strict';
const Error = require('./error.js');

console.log(new Error(1002, 'var'));
Run Code Online (Sandbox Code Playgroud)

我想要的是能够const error在模块范围内声明,或者更好的是,在它自己的文件中声明我require.但是现在这样做导致argument不是那个constructor,而是模块之一.

jaa*_*ap3 6

字符串文字会立即评估.它们不能用作以后格式化的模板(不像Python的格式字符串看起来类似).

你可以做Leonid Beschastny建议的东西,并使用很少的函数为你做插值.

像这样的东西:

const error = {
    1001: () => 'No token',
    1002: (args) => `${args[1]}`,
    1003: (args) => `${args[1]} ! ${args[2]}`,
    1004: () => 'Missing data'
};
this.error = error[code](arguments);
Run Code Online (Sandbox Code Playgroud)

  • 更好地使用传播/休息语法.传递`arguments`对象是非常低效的. (2认同)