2013-05-10 39 views
1

我设计了一个API,要求我的用户从我的服务器下载一个JavaScript文件,然后将其加载到他们的页面上。在这个文件里面有一个函数调用generic(),如果我的用户包含这个js,并且由于某种原因他们的页面上有一段js,那么存在另一个函数调用generic(),这将代表一个问题。我不是一个前端开发人员,我知道用php你可以解决这个创建一个类并把所有的函数放在里面,所以你可以称它们为$ myclass-> myfunction();但是我怎么能在js上解决这个问题呢?这对js来说甚至是一个很好的方法吗? (无jQuery,请。)保护JavaScript代码上的函数和var名称

+2

没有jQuery的,但你可以采取一个jQuery式的方法,基本上有一个功能是充当一个命名空间,所以后来用户会使用'YourAPIName.generic();'''YourAPIName.otherFunc()'等等。然后你只需要担心为你的命名空间提供一个合理的描述性的和不太可能的冲突名称,并且你可以使用通用名称为你的方法。 – nnnnnn 2013-05-10 10:24:54

回答

5

你会明显总是要揭露全球至少有一个标识符,但常用的方法是在一个立即调用的函数表达式来包装的一切:

var YourNamespace = (function() { 

    var privateData = 10; // Not accessible outside the IIFE 

    // Expose public properties (these functions can access the private data) 
    return { 
     someMethod: function() { 
      // Do stuff 
     }, 
     anotherMethod: function() { 
      // More stuff 
     } 
    }; 

}()); 

这将暴露出单个标识符YourNamespace作为具有可用作方法的属性的对象。你可以这样使用它:

YourNamespace.someMethod(); 
+0

,如果我需要从另一个方法中调用someMethod? – DomingoSL 2013-05-10 10:43:34

+0

然后,在'return'语句(如'privateData'变量)之前将它们声明为匿名函数,然后在返回的对象内返回对它们的引用。 (只有在该对象中返回的函数变为public;其他函数保持私有。) – nnnnnn 2013-05-10 10:46:38

+0

事情是,有时嵌套函数可以在函数外部调用,让我们说f1()和f2()在答案中定义,f2()调用f1(),但f1()有时会直接由用户调用,所以它不能私人化。 – DomingoSL 2013-05-10 10:51:53

0

把你的代码包装在一个包装器对象/或函数中。

var MyLibrary = { 
    global1: 123, 
    global2: 'abc', 
    doSomething: function(a){ 
     // ... 
    }, 
    somethingElse: function(b){} 
};