Javascript ไม่รองรับเนมสเปซโดยกำเนิดและต้องมีวิธีแก้ไขปัญหาชั่วคราว
เมื่อเราสร้างไลบรารี JavaScript เนมสเปซมีบทบาทสำคัญ เราสามารถสรุปไฟล์ JavaScript ที่กระจัดกระจาย (*.js) ที่ประกอบเป็นไลบรารี JavaScript ในเนมสเปซโดยไม่ต้องกำหนดฟังก์ชันหรือคลาสส่วนกลาง ตัวอย่างเช่น บุคคล ซึ่งปรากฏหลายครั้งในบทนี้สามารถสรุปเป็นเนมสเปซที่เหมาะสมโดยเป็นส่วนหนึ่งของไลบรารีได้:
รหัส 5-13:
คัดลอกรหัสรหัสดังต่อไปนี้:
วาร์คอม = {};
com.anyjava = {};
com.anyjava.Person = ฟังก์ชั่น (ชื่อ) {
//สมาชิกส่วนตัว
var _name = ชื่อ;
//ตัวเข้าถึง
this.getName = ฟังก์ชั่น() {
กลับ_ชื่อ;
-
this.setName = ฟังก์ชั่น (ชื่อ) {
_ชื่อ = ชื่อ;
-
-
//ต้นแบบ
com.anyjava.Person.prototype = {
กิน: ฟังก์ชั่น () {
alert(this.getName() + " กำลังกินอะไรบางอย่าง");
-
การนอนหลับ: ฟังก์ชั่น () {
alert(this.getName() + " is sleep.");
-
เดิน: ฟังก์ชั่น () {
alert(this.getName() + " is walking.");
-
-
var dirk = ใหม่ com.anyjava.Person("เดิร์ก");
เดิร์ค.กิน();
จากโค้ด 5-13 เราได้รับเนมสเปซที่สอดคล้องกับนิสัยของนักพัฒนา Java มากขึ้น และเมื่อสร้างอินสแตนซ์อ็อบเจ็กต์ Person เราต้องระบุพาธของพื้นที่คำสั่งของเราด้วย
นี่เป็นเคล็ดลับเล็กๆ น้อยๆ หากคุณใช้ไลบรารี JavaScript ที่พัฒนาโดยผู้อื่นและมีการวางแผนเนมสเปซที่ค่อนข้างสมบูรณ์ คุณอาจเบื่อกับการเขียนเนมสเปซที่ยาวทุกครั้ง ตัวอย่างเช่น หากคุณใช้ไลบรารี JavaScript ที่ฉันพัฒนาขึ้น ภายใต้เนมสเปซ com.anyjava.control.ui มีตัวควบคุม UI แบบขยายจำนวนมากที่คุณต้องการใช้ ฉันเดาว่าคุณคงไม่อยากเขียน var xxx = new com หลายครั้ง .anyjava.control.ui.XXX() ด้วยการระบุนามแฝงของเนมสเปซ เราสามารถเขียนโค้ดที่ซ้ำกันน้อยลง ดังที่แสดงในโค้ด 5-14 ซึ่งเป็นอีกวิธีหนึ่งของการสร้างอินสแตนซ์บุคคลในโค้ด 5-13:
รหัส 5-14:
คัดลอกรหัสรหัสดังต่อไปนี้:
var ns = com.anyjava;
var dirk = ใหม่ ns.Person("เดิร์ก");
เดิร์ค.กิน();
สิ่งสุดท้ายที่ฉันจะอธิบายคือปัญหาที่ต้องให้ความสนใจเมื่อใช้เนมสเปซ เมื่อเขียนไลบรารี JavaScript ในกรณีส่วนใหญ่ คำสั่งประกาศเนมสเปซอาจปรากฏในหลายตำแหน่งในไฟล์ JavaScript พร้อมกัน หรือในไฟล์ JavaScript หลายไฟล์ อย่างไรก็ตาม คุณลักษณะภาษา JavaScript คือตัวแปรที่ประกาศครั้งล่าสุดจะเขียนทับตัวแปรที่ประกาศไว้ก่อนหน้านี้ ตัวแปรที่มีชื่อเดียวกันกำหนดให้เราต้องใส่ใจกับการประกาศซ้ำๆ กล่าวคือ ทุกครั้งที่เราประกาศวัตถุเนมสเปซ ขอแนะนำให้พิจารณาว่ามีวัตถุเนมสเปซอยู่แล้วหรือไม่ ดังที่แสดงในโค้ด 5- 15:
รหัส 5-15:
คัดลอกรหัสรหัสดังต่อไปนี้:
ถ้า (typeof com.anyjava == "ไม่ได้กำหนด") var com.anyjava = {};
ด้วยวิธีนี้เราสามารถมั่นใจได้ว่าวัตถุ "com.anyjava" ได้รับการประกาศเพียงครั้งเดียวเท่านั้น