闭包编译器:重命名对象键,但仍然可以在其他脚本中使用原始键
Closure compiler: rename object key but still able to use original key in other script
此代码将重命名对象键,并且仍然能够使用原始键调用函数
// ==ClosureCompiler==
// @compilation_level ADVANCED_OPTIMIZATIONS
// @output_file_name default.js
// ==/ClosureCompiler==
var myClass = function() {
this["myFunc"] = this.myFunc;
this["myFunc2"] = this.myFunc2;
};
window["myClass"] = myClass;
myClass.prototype = {
myFunc: function() { alert("myFunc"); },
myFunc2: function() { alert("myFunc2"); }
};
编译成
function a(){
this.myFunc=this.a;
this.myFunc2=this.b
}
window.myClass=a;
a.prototype={
a:function(){alert("myFunc")},
b:function(){alert("myFunc2")}
};
(new myClass()).myFunc()
或(new a()).a()
均工作
然而,此方法需要声明myFunc1
、myFunc2
。。。myFuncN
多次
是不是其他方式也可以实现同样的事情?
我想用闭包编译器将所有myFunc
重命名为a
(类似这样)
在相同的脚本调用中,myClass.myFunc()
将编译为a.b()
但我仍然可以在其他脚本中调用window.myClass.myFunc()
非常感谢。
我想使用
window.myClass.myFunc
在其他脚本上访问它们
这表明您希望以不同的方式设置window
的属性,即new
的结果,例如
window.myClass = (function () { // make a closure with IIFE
function a() {
// if all you want is on the prototype, nothing to do here
}
a.prototype = { // set prototype
myFunc: function () {alert("myFunc")},
myFunc2: function () {alert("myFunc2")}
};
return new a(); // construct, return out of IIFE
}()); // Invoke IIFE
现在,window.myClass
是一个带有原型的构造的对象,您可以使用
window.myClass.myFunc(); // alerts "myFunc"
如果原型设计/继承对你来说不重要,你可以简单地进行
window.myClass = { // set directly
myFunc: function () {alert("myFunc")},
myFunc2: function () {alert("myFunc2")}
};
如果原型设计/继承对您来说很重要,但您不需要构建,并且可以假设一个现代浏览器,
window.myClass = Object.create(
{ // prototype
myFunc: function () {alert("myFunc")},
myFunc2: function () {alert("myFunc2")}
}
);
(new myClass()).myFunc()
应该工作:)
无论如何,你也可以这样导出你的方法:
// ==ClosureCompiler==
// @output_file_name default.js
// @compilation_level ADVANCED_OPTIMIZATIONS
// ==/ClosureCompiler==
var myClass = function() {
//don't declare your exports here
};
myClass.prototype["myFunc"] = function() { alert("myFunc"); };
myClass.prototype["myFunc2"] = function() { alert("myFunc2"); };
window['myClass'] = myClass;
这不太容易出错,因为您不必记住"初始化"所有方法名
它编译为:
function a() {
}
a.prototype.myFunc = function() {
alert("myFunc");
};
a.prototype.myFunc2 = function() {
alert("myFunc2");
};
window.myClass = a;
相关文章:
- java脚本在Chrome和其他浏览器中对LocaleTimeString的不同行为
- 网页上失败的javascript会导致所有其他脚本失败
- 在BoilerplateJS浏览器加载所有脚本(在其他模块中),而不考虑激活的模块
- 如果其他是咖啡脚本
- 我的时间倒计时脚本在谷歌浏览器中工作正常,但在其他浏览器中打开时它显示为南楠
- Selenium异步脚本在自己的线程中阻塞其他脚本
- 编写脚本以关闭其他选项卡或浏览器
- Firefox扩展开发:如何在内容脚本中创建一个全局函数,以便其他加载的脚本文件可以访问它
- 如何测试jQuery和某些其他脚本是否已加载
- 不要为机器人(谷歌和其他)加载JS脚本以获得更好的性能
- 如何在访问其他url时在nodewebkit中注入脚本
- JS脚本由1个元素调用,而不是由其他3个元素调用
- 长轮询脚本会停止所有其他脚本
- 我用脚本创建了一个按钮.我可以通过点击按钮调用其他函数吗?我这样做,但失败了
- 在ASP中调用HTML以调用其他脚本
- 如果其他脚本'装载顺序未知
- 有没有一个简单的脚本可以向美国/加拿大游客显示脚本1,向其他游客显示脚本2
- Pjax.页面上的其他JS脚本不会;不起作用
- jquery破坏了其他脚本
- Meteor脚本确保在其他一切之前执行(在客户端上)