ใน 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
คำหลัก
สำหรับข้อมูลเพิ่มเติมโปรดดูคำตอบของฉัน