Javascript 定制&x27;使用严格的';类似指令
我正在为我的项目寻找一种更好的日志记录/调试方法。所以我想到了使用自定义指令的想法,比如“use strict” 有可能写这样的东西吗Javascript 定制&x27;使用严格的';类似指令,javascript,use-strict,Javascript,Use Strict,我正在为我的项目寻找一种更好的日志记录/调试方法。所以我想到了使用自定义指令的想法,比如“use strict” 有可能写这样的东西吗 function xyz () { 'loglevel: info'; /// Some other code logging.debug("foobar"); } 如果xyz有一个loglevel>=info指令,logging.debug将不会记录消息 这是可能的吗?不,在将当前函数转换为字符串并检查指令时,如果没有真正的黑客手段,就无法
function xyz () {
'loglevel: info';
/// Some other code
logging.debug("foobar");
}
如果xyz有一个loglevel>=info指令,logging.debug将不会记录消息
这是可能的吗?不,在将当前函数转换为字符串并检查指令时,如果没有真正的黑客手段,就无法创建这样的指令。不值得花时间检查。但是,您可以使用函数装饰器来执行相同的功能,这有点棘手,但一旦您这样做,它将非常强大 我应该提到es7将有更容易实现的装饰器。它们仍然以相同的方式创建。它们是一个返回函数以代替原始函数的函数。但是他们有糖 对不起,我停不下来了,走得太远了。但现在这是一个非常完整的例子 或
//如果为false,则不会进行日志记录
var _; debug __;=真;
变量uuu调试uuu级别uuu=['error','warn'];
//decorator创建日志级函数。这是一个函数
//它采用日志类型,返回一个函数,该函数采用
//您想用日志功能装饰的函数
//返回作为xyz(…参数)调用的修饰函数。
功能日志级别(类型){
返回功能记录器(fn){
返回函数(){
//如果调试为false,则节省时间
如果(调试){
//运行修饰函数并获得结果
//如果有任何错误,不妨将其包装在try catch中
试一试{
var result=fn.apply(这是参数);
}捕获(e){
控制台错误(e);
}
如果(\uuuuu调试\uu级别\uuuuuu.indexOf(类型)>-1){
//将结果记录到控制台或任何您需要的功能
控制台[输入| |'日志'](结果);
}
//返回结果,以便对结果进行处理
返回结果;
}
返回fn.apply(这是参数);
}
}
}
//这将返回第一个接受要装饰的函数
var logLevelInfo=logLevel('warn');
var logLevelDebug=logLevel('error');
//这里我们使用装饰器来包装原始函数
var xyz=logLevelInfo(函数xyz(arg){
返回arg+‘bar’;
});
//这里也一样,但我们用的是另一个装饰器
var abc=logLevelDebug(函数abc(arg){
返回arg+‘baz’;
});
//这些函数已被修饰以执行日志记录
//返回结果的功能
xyz('foo');//=>'foobar'
abc('foo');//=>'foobaz'
功能日志(级别)
{
变量级别={'debug':10,'info':20};
函数写入(lvl)
{
变量句柄=函数(msg)
{
如果(levels[lvl],可能需要一些复杂的黑客,但更简单的解决方案是logging.level='info';
。除非您编写一个自定义预处理器来解析文件并替换日志语句,否则这是不可能的。我想您正在寻找“decorators”.值得一提的是,Babel中提供了具有适当预设的装饰器。
@logLevel('warn')
function xyz(){
// do some stuff
}
@logLevelInfo
function abc(){
// do some stuff
}
function Log(level)
{
var levels = { 'debug': 10, 'info': 20};
function write(lvl)
{
var handle = function(msg)
{
if (levels[lvl] <= levels[level])
console.log(lvl + ': ' + msg);
};
return handle;
}
for (var i in levels)
{
this[i] = write(i);
}
}
var log1 = new Log('info');
log1.info('hello'); // will result with an output
log1.debug('hello'); // still has an output output
var log2 = new Log('debug');
log2.info('hello'); // no output here