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

มลพิษเนมสเปซส่วนกลางใน JavaScript คืออะไร?


มลพิษเนมสเปซทั่วโลก

มลพิษเนมสเปซส่วนกลางทำให้เกิด ชื่อชนกัน . ชื่อชนกัน เป็นเรื่องปกติมากในโครงการขนาดใหญ่ที่เราอาจใช้ javascript . หลายตัว ห้องสมุด มาพูดคุยกันโดยละเอียดว่า ชื่อชนกัน คือ.

มาดูสถานการณ์ที่ 2 ทีมชื่อ A1 และ A2 กำลังทำงานในโครงการ พวกเขาทั้งคู่เตรียมไฟล์จาวาสคริปต์ของตัวเองที่ TeamA1.js และ TeamA2.js ดังที่แสดงด้านล่าง

TeamA1.js

TeamA1 ได้สร้างฟังก์ชันนักเรียนและมี 2 พารามิเตอร์ fname และ lname (ชื่อและนามสกุล)

function student(fname, lname){
   this.fname = fname;
   this.lname = lname;
   this.getFullName = function (){
      return this.fname + " " + this.lname
   }
}

TeamA2.js

TeAMA2 ได้สร้างฟังก์ชันเดียวกัน (นักเรียน) และมี 3 พารามิเตอร์ fname, mname, lname

function student(fname, mname, lname){
   this.fname = fname;
   this.mname = mname;
   this.lname = lname;
  this.getFullName = function (){
      return this.fname + " " + this.mname + " " + this.lname;
   }
}

ตอนนี้สร้างไฟล์ html เพื่อใช้งานไฟล์ js ด้านบน วางไฟล์ js ในแท็ก

ไฟล์ 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

คำอธิบาย

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

เหตุผลเบื้องหลังคือจาวาสคริปต์ไม่สนับสนุนฟังก์ชันโอเวอร์โหลด . มันแค่ ลบล้าง ฟังก์ชันที่มีฟังก์ชันอื่นที่มีชื่อเหมือนกัน (นี่คือ นักเรียน) ในตัวอย่างของเรา เนื่องจากฟังก์ชันที่มี 3 พารามิเตอร์ (TeamA2.js) ได้วางไว้หลังฟังก์ชันที่มี 2 พารามิเตอร์ (TeamA1.js), TeamA2 ฟังก์ชันแทนที่ TeamA1 ฟังก์ชันแสดง ไม่ได้กำหนด ในการส่งออก ในกรณีที่ตำแหน่งของไฟล์ js สองไฟล์กลับตำแหน่งตามลำดับ ผลลัพธ์จะเป็น "Rajendra prasad"

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