在Javascript中,有几种在JavaScript中创建和管理类/命名空间的突出技术。
我很好奇哪种情况需要使用一种技术而不是另一种技术。我想选一个并坚持前进。
我编写了由多个团队维护和共享的企业代码,并且我想知道编写可维护的javascript时的最佳实践是什么?
我倾向于使用自执行匿名功能,但是我很好奇社区对这些技术的投票。
原型:
function obj()
{
}
obj.prototype.test = function() { alert('Hello?'); };
var obj2 = new obj();
obj2.test();
自闭式匿名函数:
//Self-Executing Anonymous Function
(function( skillet, $, undefined ) {
//Private Property
var isHot = true;
//Public Property
skillet.ingredient = "Bacon Strips";
//Public Method
skillet.fry = function() {
var oliveOil;
addItem( "\t\n Butter \n\t" );
addItem( oliveOil );
console.log( "Frying " + skillet.ingredient );
};
//Private Method
function addItem( item ) {
if ( item !== undefined ) {
console.log( "Adding " + $.trim(item) );
}
}
}( window.skillet = window.skillet || {}, jQuery ));
//Public Properties
console.log( skillet.ingredient ); //Bacon Strips
//Public Methods
skillet.fry(); //Adding Butter & Fraying Bacon Strips
//Adding a Public Property
skillet.quantity = "12"; console.log( skillet.quantity ); //12
//Adding New Functionality to the Skillet
(function( skillet, $, undefined ) {
//Private Property
var amountOfGrease = "1 Cup";
//Public Method
skillet.toString = function() {
console.log( skillet.quantity + " " +
skillet.ingredient + " & " +
amountOfGrease + " of Grease" );
console.log( isHot ? "Hot" : "Cold" );
};
}( window.skillet = window.skillet || {}, jQuery ));
//end of skillet definition
try {
//12 Bacon Strips & 1 Cup of Grease
skillet.toString(); //Throws Exception
} catch( e ) {
console.log( e.message ); //isHot is not defined
}
我觉得我应该提到自执行匿名函数是jQuery团队使用的模式。
更新
当我问这个问题时,我并没有真正理解我想要理解的重要性。真正的现实问题是是否使用new来创建对象的实例或使用不需要构造函数/无需使用new
关键字的模式。
我添加了自己的答案,因为我认为我们应该使用不使用new
关键字的模式。
有关更多信息,请参见我的答案。