Computer >> Máy Tính >  >> Lập trình >> Javascript

Làm thế nào để tránh ô nhiễm không gian tên trong JavaScript?

Tránh ô nhiễm không gian tên

Javascript không hỗ trợ quá tải chức năng . Vì vậy, khi bất kỳ hai chức năng nào có cùng tên được sử dụng, một chức năng sẽ ghi đè lên chức năng kia tùy thuộc vào thứ tự mà các chức năng này đang tải. Điều này có nghĩa là javascript thiếu không gian tên (quy ước đặt tên). Tuy nhiên, chúng ta có thể sử dụng đối tượng để tạo không gian tên để chúng ta có thể tránh xung đột tên.

var Tutorix = Tutorix || {};

Dòng mã trên cho biết rằng nếu Tutorix đối tượng đã có sẵn thì hãy sử dụng nó, nếu không hãy tạo một đối tượng mới.

Chúng ta cũng có thể tạo không gian tên lồng nhau là một không gian tên bên trong một không gian tên khác.

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

Trong các dòng mã ở trên, dòng thứ hai gợi ý rằng nếu TeamA1 đã tồn tại, hãy sử dụng đối tượng đó, nếu không, hãy tạo TeamA1 trống đối tượng.

Trong ví dụ sau, mặc dù chúng ta chỉ truyền 2 tham số trong tệp HTML, chúng ta vẫn nhận được 3 tham số trong đầu ra. Điều này là do xung đột không gian tên điều đó xảy ra giữa Team1 và Team2 (cả hai đều có cùng tên chức năng " học sinh ").

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>

Tệp 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>

Đầu ra

Rajendra prasad undefined.


Kể từ khi xung đột không gian tên xảy ra giữa TeamA1.js TeamA2.js , mặc dù chúng tôi chỉ gửi 2 tham số "Rajendra" và "prasad" để truy cập TeamA1.js, chúng tôi nhận được 3 tham số "Rajendra prasad không xác định" trong đầu ra. Điều này là do TeamA2.js có 3 tham số đã ghi đè TeamA1.js .

Vì vậy, để tránh loại xung đột tên này chúng ta phải tạo không gian tên bằng cách sử dụng các đối tượng.

TeamA1.js

Trong không gian tên mã sau TeamA1 được tạo bằng một đối tượng khác có tên là 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

Trong không gian tên mã sau TeamA2 được tạo bằng một đối tượng khác có tên là 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>

Tệp HTML

Bao gồm cả tệp js (TeamA1.js và TeamA2.js) trong tệp 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>

Đầu ra

Rajendra prasad
Babu Rajendra prasad

Trong ví dụ trên, chúng tôi đã sử dụng không gian tên lồng nhau đó là trong Tutorix không gian tên mà chúng tôi đã lồng vào TeamA1 TeamA2 để tránh va chạm tên . vì xung đột không gian tên đã tránh được, chúng tôi đã có đầu ra cho từng tập lệnh riêng lẻ.