繁体   English   中英

Google Closure编译器方法转换为全局函数

[英]Google closure compiler method converted to global function

我有这个简单的代码:(为了保持简单,我删除了一些代码...)

if(!window['PSI']) window['PSI'] = {};
/**@constructor*/
window['PSI']['Select'] = function(pattern) {
 this.highlight(pattern);
}
window['PSI']['Select'].prototype = {
highlight: function( pattern) {
    var regex = (typeof pattern === 'string') ? new RegExp(pattern, 'i') : pattern;
    var highlight = function(node) {
        if (node.nodeType === 3) {
            var pos = node.data.search(a);

        } else if (node.nodeType === 1 ) {
            for (var i = 0; i < node.childNodes.length; ++i) {
                i += highlight(node.childNodes[i]);
            }
        }
    }
    var items = document.getElementsByTagName("li");
    for (var i = 0; i < items.length; ++i) {
        highlight(items[i]);
    }
}

}

然后我运行java -jar closure-compiler-v20160713.jar --compilation_level ADVANCED_OPTIMIZATIONS --js source.js --js_output_file source.min.js

这是输出:

window.PSI || (window.PSI = {});
window.PSI.Select = function() { g() };
window.PSI.Select.prototype = {};
function g() {
function e(b) {
  if(3 === b.nodeType) b.data.search(a);
  else if(1 === b.nodeType) for (var c = 0; c < b.childNodes.length; ++c)c += e(b.childNodes[c])
  }
  for (var f = document.getElementsByTagName("li"), d = 0; d < f.length; ++d)e(f[d])
 };

我的Highlight方法成为全局函数,有什么方法可以使我的方法保持为PSI.Select对象的原型? 奇怪的是,并不是我所有的方法都这样工作,只有2个...这是其中之一

我必须在方法前添加--generate_exports和--export_local_property_definitions标志以及/ ** @export * /,看来编译器注意到我的方法从未引用过'this',因此它决定从原型中删除它是安全的,但我不想那样。 如果有人有更好的建议,请这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM