我设计了一个API,要求我的用户从我的服务器下载一个JavaScript文件,然后将其加载到他们的页面上。在这个文件里面有一个函数调用generic(),如果我的用户包含这个js,并且由于某种原因他们的页面上有一段js,那么存在另一个函数调用generic(),这将代表一个问题。我不是一个前端开发人员,我知道用php你可以解决这个创建一个类并把所有的函数放在里面,所以你可以称它们为$ myclass-> myfunction();但是我怎么能在js上解决这个问题呢?这对js来说甚至是一个很好的方法吗? (无jQuery,请。)保护JavaScript代码上的函数和var名称
回答
你会明显总是要揭露全球至少有一个标识符,但常用的方法是在一个立即调用的函数表达式来包装的一切:
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();
,如果我需要从另一个方法中调用someMethod? – DomingoSL 2013-05-10 10:43:34
然后,在'return'语句(如'privateData'变量)之前将它们声明为匿名函数,然后在返回的对象内返回对它们的引用。 (只有在该对象中返回的函数变为public;其他函数保持私有。) – nnnnnn 2013-05-10 10:46:38
事情是,有时嵌套函数可以在函数外部调用,让我们说f1()和f2()在答案中定义,f2()调用f1(),但f1()有时会直接由用户调用,所以它不能私人化。 – DomingoSL 2013-05-10 10:51:53
把你的代码包装在一个包装器对象/或函数中。
var MyLibrary = {
global1: 123,
global2: 'abc',
doSomething: function(a){
// ...
},
somethingElse: function(b){}
};
如果妳正在寻找在Javascript
Encapsulation
,则u正在寻找Closures
- 1. R中的保护函数名称
- 2. 使用javascript计数迭代var名称
- 3. 如何保护Javascript代码?
- 4. 这是什么jQuery代码做 - 函数($)和VAR = VAR => VAR =>
- 5. 哈希函数和保护密码
- 6. JavaScript中的安全/保护代码
- 7. Android源代码函数特有名称
- 8. 保护表和字段名称
- 9. javascript在内部函数中保持var
- 10. 保护图表名称
- 11. 源代码保护
- 12. 保护Ruby代码
- 13. 保护PHP代码
- 14. 保护Ruby代码
- 15. PHP - 保护代码
- 16. 调用受用户名和密码保护的JavaScript文件
- 17. Javascript:用匿名函数包装代码
- 18. 如何连接JavaScript中的var名称?
- 19. 能够用受保护的构造函数创建一个var?
- 20. 保护我的代码?
- 21. 保护DLL的源代码
- 22. Javascript中的var name = function(){}和函数名(){}有什么区别吗?
- 23. 许可代码和名称
- 24. GitHub上和源代码保护和控制
- 25. 在Matlab和Python中保护源代码
- 26. 如何在演示中保护商业HTML/CSS和JavaScript代码?
- 27. Javascript:动态var名称与PHP?
- 28. 密码保护域名
- 29. 什么是编码/保护JavaScript代码的最佳方式?
- 30. 如何保护源代码?
没有jQuery的,但你可以采取一个jQuery式的方法,基本上有一个功能是充当一个命名空间,所以后来用户会使用'YourAPIName.generic();'''YourAPIName.otherFunc()'等等。然后你只需要担心为你的命名空间提供一个合理的描述性的和不太可能的冲突名称,并且你可以使用通用名称为你的方法。 – nnnnnn 2013-05-10 10:24:54