我正在尝试提高javascript应用程序的整体性能,并且我正在尝试为所有独立函数创建实用程序类。这样做是一种好习惯吗?
我也读过可以使用这样的匿名函数:
(function(){
var Utils = {
test: function () { ... },
test1: function () { ... }
...
}
}())
但由于某种原因,我无法在我的其他课程中使用Utils.test(),我得到
ReferenceError: Utils is not defined
现在我正在使用
var Utils = {
test: function () { ... },
test1: function () { ... },
....
}
这样做会有什么改进,或者我应该坚持使用经典的分离函数
function test() { ... }
function test1() { ... }
....
感谢您的帮助
答案 0 :(得分:7)
您需要使用不同的语法来处理IIFE,但我认为这样做是很好的做法
var Utils = (function(){
return {
test: function () { ... },
test1: function () { ... }
...
}
}())
答案 1 :(得分:5)
对于一个规模合理的项目,通常你会有一个项目命名空间,在这个命名空间下,所有的项目代码都会落在你的身上,因此你不会不必要地污染全局命名空间。您可以将命名空间作为参数传递给IIFE,并将您在其中创建的代码附加到命名空间。像这样:
;(function(namespace) {
namespace.Utils = {
test: function() {
console.log('test');
},
test1: function() {
console.log('test1');
}
};
}(this.namespace = this.namespace || {}));
namespace.Utils.test(); // test
答案 2 :(得分:0)
如今,使用ES6,您可能会在模块的根目录中导出所有方法,然后执行import * as Utils from 'utils.js'
答案 3 :(得分:-1)
Gualtiero Testa wrote about this on his blog。我认为如果你使用的是ES6环境,这个方法会更好。
我采用(并建议)的常用方法是创建实用程序类 如下所示:
function Util () {}
Util.read = function (sel) {
return jQuery(sel).val();
};
Util.write = function (sel, val) {
jQuery(sel).val(val);
};
如何使用实用程序功能?
// read the value of the element with id myinput
var val = Util.read('#myinput');