2013-04-09 129 views
1

我的腳本中存在一堆函數,它駐留在.js文件中。 如果某些其他人編寫的其他腳本使用與我的腳本中相同的函數名稱,如何避免與同一頁面中的函數名稱發生衝突?避免與函數命名約定衝突javascript

有沒有辦法做到這一點?

+0

你無法避免它徹底,但如果u包裝在一個類中即會多大意義 – 2013-04-09 10:05:21

+0

_some其他guys_的? – Halcyon 2013-04-09 10:08:41

回答

4

使用命名空間..

var company = {}; 

company.doSomething = function() { 
}; 

company.project = {}; 
company.project.submodule = {}; 
company.project.submodule.doSomething = function() {}; 
6

如果你不需要你的腳本之外訪問這些功能,你可以在一個立即調用的函數表達式包住整個腳本:

(function() { 
    // Your code here 
}()); 

這引入了一個新的範圍,因此它內部的任何聲明都不可見。

如果你需要一個範圍的外部訪問,使您的充當「命名空間」的方法:

var YourStuff = (function() { 
    // Private functions etc... 

    // Expose public methods 
    return { 
     someMethod: function() {} 
    }; 
}()); 

通過採取這種方法,你只推出單一的全球標識,減少衝突的機會。你可以調用方法如下:

YourStuff.someMethod(); 
+0

@ alex23 - 如何影響任何時間? 「重疊關閉」是什麼意思? – 2013-04-09 10:08:16

+0

@ alex23 - 是的,在JavaScript中沒有真正的「私人」這樣的東西。 IIFE一旦被評估就執行......與其他函數調用相同。它與DOM無關。如果您需要等待DOM準備好,您可以在您的IIFE中使用DOM準備好的處理程序。 – 2013-04-09 10:12:08