javascript中的宏定义

时间:2011-05-12 15:46:25

标签: javascript macros

有没有办法可以在Javascript中定义类似于C / C ++宏的宏?

我想将它用于调试语句: 像

这样的东西
#ifdef TEST__
#define MYDEBUG(##x) debug(__FILE__,x)
#else
#define debug
#endif

不一定相似,但我想要实现这一功能。我有办法做到吗?

由于

6 个答案:

答案 0 :(得分:18)

var de = false; // true when debugging
function bug( msg ){ ... display msg ... }

用法:

de&&bug( "hello world")

当“de”为假(生产模式)时,开销很小。

答案 1 :(得分:1)

在JavaScript中无法做到这一点。你可以有一个像

这样的全局变量
var isDebugging = false;

然后在编写代码时,只需检查变量是否为真。显然,这将在文件大小上产生一些不必要的开销,并且性能损失非常小。但除了指定自己的格式之外,还可以通过在上传前删除调试代码的工具来运行代码。

这样的东西
var foo = function() {
   <!-- document.write( "blah" ); -->
};

对于发布版本,您将删除标记内的所有内容,包括。对于调试版本,您可以删除标记,但保留代码。可以使用Ant构建脚本或类似脚本执行此类操作。

答案 2 :(得分:0)

Javascript没有宏,因为没有编译器。您可以使用console.log并编写正则表达式来部署时删除这些语句。

答案 3 :(得分:0)

虽然@sapht说没有编译时间,但如果需要,可以预处理文件。通常我使用ant脚本将许多Javascript文件组合在一起并添加构建信息。

从谷歌搜索中我发现有一个Javascript预处理器,您可能会感兴趣:http://www.bramstein.com/projects/preprocess/

答案 4 :(得分:0)

对于那些仍然感兴趣的人:

https://github.com/dcodeIO/Preprocessor.js

  

纯JavaScript中的JavaScript源文件预处理器,例如构建不同版本的库。

示例:

// #ifdef FULL
console.log("Including extension");
// #include "path/to/extension.js"
// #else
console.log("Not including extension");
// #endif

// #if 1==2
console.log("1==2");
// #elif 2==2
console.log("2==2");
// #endif

答案 5 :(得分:0)

使用 Builder - https://github.com/electricimp/Builder,您可以这样做:

@macro MYDEBUG(x)
  debug(@{__FILE__}, @{x});
@end

...

@{MYDEBUG(100500)}

还支持直接来自GitHub。