In Javascript gibt es einige klar hervorgehobene Techniken zum Erstellen und Verwalten von Klassen / Namespaces in Javascript.
Ich bin gespannt, welche Situationen es rechtfertigen, eine Technik gegen die andere einzusetzen. Ich möchte einen auswählen und dabei bleiben, um vorwärts zu kommen.
Ich schreibe Unternehmenscode, der von mehreren Teams verwaltet und gemeinsam genutzt wird, und ich möchte wissen, was die beste Vorgehensweise beim Schreiben von wartbarem Javascript ist.
Ich bevorzuge normalerweise selbstausführende anonyme Funktionen, bin jedoch gespannt, wie die Community über diese Techniken abstimmt.
Prototyp :
function obj()
{
}
obj.prototype.test = function() { alert('Hello?'); };
var obj2 = new obj();
obj2.test();
Selbstschließende anonyme Funktion:
//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
}
Ich denke, ich sollte erwähnen, dass die selbstausführende anonyme Funktion das vom jQuery-Team verwendete Muster ist.
Update
Als ich diese Frage stellte, sah ich nicht wirklich, wie wichtig es war, was ich zu verstehen versuchte. Die eigentliche Frage ist, ob Sie new verwenden oder nicht, um Instanzen Ihrer Objekte zu erstellen, oder um Muster zu verwenden, für die keine Konstruktoren erforderlich sind, bzw. um das new
Schlüsselwort zu verwenden.
Ich habe meine eigene Antwort hinzugefügt, da wir meiner Meinung nach Muster verwenden sollten, bei denen das new
Schlüsselwort nicht verwendet wird .
Weitere Informationen finden Sie in meiner Antwort.