首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Google closure编译器方法转换为全局函数

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

Stack Overflow用户
提问于 2016-07-21 17:20:07
回答 1查看 88关注 0票数 0

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

代码语言:javascript
运行
复制
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之后

下面是输出:

代码语言:javascript
运行
复制
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])
 };

我的高亮方法变成了一个全局函数,有没有办法将我的方法保留为PSI.Select对象的原型?奇怪的是,并不是我所有的方法都是这样的,只有2个...这就是其中之一

EN

回答 1

Stack Overflow用户

发布于 2016-07-22 03:00:29

我不得不在我的方法之前添加--generate_exports和--export_local_property_definitions标志和/** @export */,似乎编译器注意到我的方法从来没有引用过'this‘,它决定从原型中删除它是安全的,但我不想这样。如果有人有更好的建议,请提出来。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38500062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档