我有这个简单的代码:(我删除了一些代码以保持它的简单性...)
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])
};我的高亮方法变成了一个全局函数,有没有办法将我的方法保留为PSI.Select对象的原型?奇怪的是,并不是我所有的方法都是这样的,只有2个...这就是其中之一
发布于 2016-07-22 03:00:29
我不得不在我的方法之前添加--generate_exports和--export_local_property_definitions标志和/** @export */,似乎编译器注意到我的方法从来没有引用过'this‘,它决定从原型中删除它是安全的,但我不想这样。如果有人有更好的建议,请提出来。
https://stackoverflow.com/questions/38500062
复制相似问题