Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 定制&x27;使用严格的';类似指令_Javascript_Use Strict - Fatal编程技术网

Javascript 定制&x27;使用严格的';类似指令

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将不会记录消息 这是可能的吗?不,在将当前函数转换为字符串并检查指令时,如果没有真正的黑客手段,就无法

我正在为我的项目寻找一种更好的日志记录/调试方法。所以我想到了使用自定义指令的想法,比如“use strict”

有可能写这样的东西吗

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