为了编写更好,更紧密,更安全的代码,我很高兴在Javascript中采用一种更加模块化的模式。但是,在关于这个主题的自我教育中,我看到有不同的方法可以做到这一点。似乎最常见的两个是自调用功能模式(来自本文):
var HTMLChanger = (function() {
var contents = 'contents'
var changeHTML = function() {
var element = document.getElementById('attribute-to-change');
element.innerHTML = contents;
}
return {
callChangeHTML: function() {
changeHTML();
console.log(contents);
}
};
})();
HTMLChanger.callChangeHTML(); // Outputs: 'contents'
console.log(HTMLChanger.contents); // undefined
或者,从另一篇文章中,对象字面量方法模式:
var s,
NewsWidget = {
settings: {
numArticles: 5,
articleList: $("#article-list"),
moreButton: $("#more-button")
},
init: function() {
s = this.settings;
this.bindUIActions();
},
bindUIActions: function() {
s.moreButton.on("click", function() {
NewsWidget.getMoreArticles(s.numArticles);
});
},
getMoreArticles: function(numToGet) {
// $.ajax or something
// using numToGet as param
}
};
而且我敢肯定,还有很多其他人(在第一篇文章中有一些描述)-哪种模式更好和/或更常见?如果要选择默认的go-to(除非我有特殊的理由要选择其他模式),应该是什么,为什么?
混合搭配完全可以接受吗?
我不会说一个比另一个更好,但是我会尽力阐明每个优点,以便您可以根据自己的情况选择使用哪个。
构造函数模式使用其属性和方法创建一个对象,所有这些对象都是公共的。这很容易理解,您仍然可以在创建后添加功能。
自我调用模式(也称为SEAF或IIFE)在开始时可能看起来比较复杂,但是它具有私有属性或方法的优点,因此您可以指定要公开的代码部分。您也可以通过跳过return语句将其全部设为私有。
一篇出色的文章帮助我理解了JavaScript模式,这就是“良好的C#习惯如何鼓励不良的JavaScript习惯”。即使从C#到Java语言,它也适合使用JS的任何人。
结论是,IIFE模式将为您提供您可能希望在模块中添加的所有工具,但这并不意味着在功能不太复杂的某些情况下,使用构造函数模式并不方便。关于混合它们,我个人不喜欢将多个模式用于一个目标的项目。使用IIFE的IMHO更加健壮且长期有用,但对于快速有趣的游戏对象文字而言,可能是一种方法:-)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句