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