Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

จะหลีกเลี่ยงมลพิษเนมสเปซใน JavaScript ได้อย่างไร


หลีกเลี่ยงมลพิษเนมสเปซ

จาวาสคริปต์ ไม่รองรับฟังก์ชัน โอเวอร์โหลด . ดังนั้น เมื่อมีการใช้ฟังก์ชันสองฟังก์ชันที่มีชื่อเดียวกัน ฟังก์ชันหนึ่งจะแทนที่ฟังก์ชันอื่นๆ โดยขึ้นอยู่กับลำดับที่ฟังก์ชันเหล่านี้โหลด ซึ่งหมายความว่าจาวาสคริปต์ไม่มี เนมสเปซ (หลักการตั้งชื่อ). อย่างไรก็ตาม เราสามารถใช้ วัตถุ เพื่อสร้างเนมสเปซเพื่อไม่ให้ชื่อชนกัน

var Tutorix = Tutorix || {};

โค้ดข้างบนบอกว่าถ้า Tutorix วัตถุมีอยู่แล้วจากนั้นใช้ มิฉะนั้น สร้างวัตถุใหม่

นอกจากนี้เรายังสามารถสร้างเนมสเปซที่ซ้อนกันซึ่งเป็นเนมสเปซภายในเนมสเปซอื่นได้

var Tutorix = Tutorix || {};
Tutorix.TeamA1 = Tutorix.TeamA1 || {};

ในบรรทัดข้างบนของโค้ดบรรทัดที่สอง แสดงว่าถ้า TeamA1 มีอยู่แล้วให้ใช้วัตถุนั้น มิฉะนั้นให้สร้าง TeamA1 . ที่ว่างเปล่า วัตถุ

ในตัวอย่างต่อไปนี้ แม้ว่าเราจะส่งพารามิเตอร์เพียง 2 รายการในไฟล์ HTML แต่เราจะได้รับพารามิเตอร์ 3 รายการในผลลัพธ์ นี่เป็นเพราะ การชนกันของเนมสเปซ ที่เกิดขึ้นระหว่าง Team1 และ Team2 (ทั้งคู่ใช้ชื่อฟังก์ชันเดียวกัน "นักเรียน ")

TeamA1.js

<html>
<body>
<script>
   function student(Fname,Lname){
      this.Fname = Fname;
      this.Lname = Lname;
      This.getFullName = function(){
         return this.Fname + " " + this.Lname;
      }
   }
</script>
</body>
</html>

TeamA2.js

<html>
<body>
<script>
   function student(Fname, Mname, Lname){
   this.Fname = Fname;
   this.Mname = Mname;
   this.Lname = Lname;
   This.getFullName = function(){
      return this.Fname + " " + this.Mname + " " + this.Lname;
   }
   }
</script>
</body>
</html>

ไฟล์ HTML

<html>
<head>
<script type = "javascript" src = "TeamA1.js"></script>
<script type = "javascript" src = "TeamA2.js"></script>
</head>
<body>
<div id = "resultDiv"></div>
<script>
   document.getElementById("resultDiv").innerHTML =
   new student("Rajendra", "prasad").getFullName();
</script>
</body>
</html>

ผลลัพธ์

Rajendra prasad undefined.


ตั้งแต่ การชนกันของเนมสเปซ เกิดขึ้นระหว่าง Teama1.js และ TeamA2.js แม้ว่าเราจะส่งพารามิเตอร์ "Rajendra" และ "prasad" เพียง 2 พารามิเตอร์เพื่อเข้าถึง TeamA1.js เราก็ได้พารามิเตอร์ 3 ตัว "Rajendra prasad undefined" ในเอาต์พุต นี่เป็นเพราะ Teama2.js ซึ่งมี 3 พารามิเตอร์ได้แทนที่ TeamA1.js .

ดังนั้นเพื่อหลีกเลี่ยง ชื่อชนกัน . ประเภทนี้ เราต้องสร้างเนมสเปซโดยใช้วัตถุ

TeamA1.js

ในโค้ดเนมสเปซต่อไปนี้ TeamA1 ถูกสร้างขึ้นโดยใช้วัตถุอื่นที่เรียกว่า Tutorix .

<html>
<body>
<script>
   var Tutorix = Tutorix || {};
   Tutorix.TeamA1 = Tutorix.TeamA1 || {};
   Tutorix.TeamA1.student = function (Fname, Lname){
      this.Fname = Fname;
      this.Lname = Lname;
      this.getFullName = function(){
         return this.Fname + " " + this.Lname;
      }
      return this;
   }
</script>
</body>
</html>

TeamA2.js

ในโค้ดเนมสเปซต่อไปนี้ TeamA2 ถูกสร้างขึ้นโดยใช้วัตถุอื่นที่เรียกว่า Tutorix .

<html>
<body>
<script>
   var Tutorix = Tutorix || {};
   Tutorix.TeamA2 = Tutorix.TeamA2 || {};
   Tutorix.TeamA2.student = function (Fname, Mname, Lname){
      this.Fname = Fname;
      this.Mname = Mname;
      this.Lname = Lname;
      this.getFullName = function(){
         return this.Fname + " " + this.Mname + " " + this.Lname;
      }
      return this;
   }
</script>
</body>
</html>

ไฟล์ HTML

รวมไฟล์ js (TeamA1.js และ TeamA2.js) ไว้ในไฟล์ HTML

<html>
<head>
<script type = "javascript" src = "TeamA1.js"></script>
<script type = "javascript" src = "TeamA2.js"></script>
</head>
<body>
<script>
   document.write(window.Tutorix.TeamA1.student("Rajendra", "prasad").getFullName());
   document.write(window.Tutorix.TeamA2.student("Babu","Rajendra","prasad").getFullName());
</script>
</body>
</html>

ผลลัพธ์

Rajendra prasad
Babu Rajendra prasad

ในตัวอย่างข้างต้น เราได้ใช้เนมสเปซที่ซ้อนกัน ที่อยู่ใน Tutorix เนมสเปซที่เราซ้อน TeamA1 และ TeAMA2 เพื่อหลีกเลี่ยงชื่อชนกัน . เนื่องจากมีการหลีกเลี่ยงการชนกันของเนมสเปซ เราจึงได้ผลลัพธ์สำหรับสคริปต์แต่ละรายการ