【发布时间】:2016-10-25 08:44:58
【问题描述】:
我开始使用模板文字来制作错误生成器。
我有工作代码,但我不得不在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;
调用如下:
'use strict';
const Error = require('./error.js');
console.log(new Error(1002, 'var'));
我想要的是能够在模块范围内声明const error,或者更好的是,在我自己的文件中声明require。但是现在这样做会导致argument 不是constructor 的成员,而是模块的成员。
【问题讨论】:
-
您可以将模板字符串包装在工厂函数中。
-
所有这一切要记住的是,如果
arguments[1]是一个字符串,那么对于 "1002:${arguments[1]}," 根本不需要字符串插值。 -
这些是模板文字,而不是字符串文字。
-
关键是模板文字应该用编译器函数包装或重新实现。在这一点上,这个模板语法并不比那里的任何其他 JS 模板引擎更有吸引力。
标签: javascript node.js ecmascript-6