我正在使用requireJS编写第三方JS应用程序,我希望保持全局命名空间清除除了将由我的应用程序创建的单个全局接口对象之外的所有内容.除了requireJS之外,我没有遇到任何问题. 作为优化器的一个选项,可以将require.js滚动到构建中,并且可以定义名称空间,使优化器作用域的所有引用都需要函数到该名称空间. 例如. require(…)成为my_scope.require(…) 问题是这个全局命名空间对象在应用程序中创建之前不会存在.优化器确保requireJS加载...
有没有一种简单的方法可以查看您(或其他库)已经污染到全局命名空间的变量? 在(chrome)调试器控制台中,键入this / this.window会显示数百个对象,即使没有其他库也是如此. 有没有办法让它修剪所有标准浏览器空间对象并返回全局变量(或者更好,按脚本文件分类)?解决方法:如果可以在加载任何其他脚本之前运行脚本,则可以存储内置int窗口属性的列表:var builtInProps = [] for(key in window){builtInProps.push(key); }然后加载所有脚...
在创建JavaScript命名空间时,是否应该注意任何危险/警告? 我们的项目相当广泛,我们运行了很多JavaScript文件(20个,期待更多).没有使用命名空间就不可能有任何代码可维护性,所以我们这样实现它们:var namespace1 = {doSomething: function() {...},doSomethingElse: function() {...}}然后创建层次结构,我们将它们链接起来:var globalNamespace = {functions1: namespace1,functions2: namespace2,...}这工作正常,但它本质上是一...
如何使用ES6模块分配命名空间?我想用例如jQuery做的,其中命名空间是$但是以预期的ES6方式执行.我的所有模块都是在单独的文件中构建的,这些文件将类/函数/任何内容导出为默认值(例如导出默认类皮卡丘).如何将其导入另一个(主)文件,以便用户可以使用例如Namespace.Pikachu? 我已经明白它可能与命名出口有关,但我不完全确定如何.有什么帮助吗?解决方法:如果使用模块,则不需要名称空间. 命名空间的目的是防止定义相同名称的不同文件...
我正在创建一个可以在各种网站上使用的脚本.由于我不知道它的使用情况,我希望能够将它放在各种沙箱中,它不会影响页面上的其他javascripts,反过来也不受其他javascripts的影响. 最基本的开始是使用自调用功能:(function(){x = function(){ alert('hi!');x(); })();但我的问题是,如果已经分配了x,那么你不能覆盖它:x = function(){ alert('too late!'); (function(){x = function(){ alert('hi!');x(); })();这会警告“太迟了!”而...
我想创建自己的命名空间,比如$for JQuery(function(app) {app.fn.log = function(data) {console.log(data);};}(app));app.log("data");但是此代码返回错误 – 未捕获的ReferenceError:app未定义 如何创建自己的命名空间?解决方法: window.app = {};(function(app) {app.log = function(data) {console.log(data);}; }(app));app.log("data");jQuery与它的fn略有不同:因为你使用$(‘selector’)语法来查找你需要处理的元素jQuer...
我目前正在使用以下模式在Javascript中创建名称空间和单例对象:var Namespace = function () {var priv = {privateVar1: '',privateVar2: '',privateFunction1: function () {//do stuff[...]},[...]};var pub = {publicVar1: '',publicFunction1: function () {//do stuff with private functions and variablespriv.privateVar1 = priv.privateFunction1(pub.publicVar1);[...]},[...]};return pub; }();我希望你明白这个主意.有...
我一直在我的node.js模块中使用一个模式,这对我来说是显而易见的,我认为它一定有问题,或者我会看到更多的人这样做.为了保留模块全局的私有变量,我只需将它们作为属性附加到模块对象上.像这样:module.exports = {init: function() {module.someClient = initializeSomethingHere()},someMethod: function(done) {module.someClient.doSomething(done)} }这似乎比我这样的东西更好……var someClient;module.exports = {init: funct...
Javascript由于没有命名空间的概念,所以好多的框架或库就用了某些“命名空间”的技巧。在学习作为函数的命名空间时,我翻阅了好多的书本和blog,很多的概念和说明都是要么过于烦杂或过于简单。现在由我来进行一个的系统的描述和介绍。 一、浏览器启动后的初步理解 1.我们要上网,就要打开浏览器,输入网址,浏览器就负责渲染和相应用户的鼠标动作。而打开浏览器这个进程后,浏览器的网络线程负责解析网址为ip地址,去网页服务器下...