如何在JavaScript中创建命名空间,以便我的对象和函数不会被其他同名的对象和函数覆盖?我用过以下内容:
if (Foo == null || typeof(Foo) != "object") { var Foo = new Object();}
Run Code Online (Sandbox Code Playgroud)
这样做有更优雅或简洁的方式吗?
似乎有很多方法来设置JavaScript应用程序,因此对于哪一个是正确的还是最好的而言令人困惑.以下技术或更好的方法有什么不同吗?
MyNamespace.MyClass = {
someProperty: 5,
anotherProperty: false,
init: function () {
//do initialization
},
someFunction: function () {
//do something
}
};
$(function () {
MyNamespace.MyClass.init();
});
Run Code Online (Sandbox Code Playgroud)
其他方式:
MyNamespace.MyClass = (function () {
var someProperty = 5;
var anotherProperty = false;
var init = function () {
//do something
};
var someFunction = function () {
//do something
};
return {
someProperty: someProperty
anotherProperty: anotherProperty
init: init
someFunction: someFunction
};
}());
MyNamespace.MyClass.init();
Run Code Online (Sandbox Code Playgroud)
第一种技术感觉更像是一门课.如果这有所不同,我来自服务器端背景.第二种技术似乎更冗余,有点尴尬,但我看到这也使用了很多.有人可以帮助解决一些问题并建议前进的最佳方式吗?我想创建一个有很多类相互交流的应用程序.
javascript oop javascript-framework javascript-objects javascript-namespaces
可能重复:
这是什么意思?(function(x,y)){...}){a,b); 在JavaScript
中围绕JavaScript对象/函数/类声明的括号是什么意思?
大家好
我不知道以下是什么:
(function(){
// Do something here
...
})(someWord) //Why is this here?;
Run Code Online (Sandbox Code Playgroud)
我的问题是:
(function(){});?我通常在jquery代码和其他一些javascript库中看到这些.
javascript scope coding-style anonymous-function javascript-namespaces
可能重复:
Javascript命名空间
我是JavaScript的新手,想知道是否有人能给我一个很好的描述JavaScript Namespacing的含义?
此外,在该主题上也非常感谢任何资源,例如文章等.
我正处于尝试编写一些合理的Javascript的早期阶段.我想基本上命名我的应用程序名称下的所有东西以尽可能避免全局变量,但仍然给我一种方法来访问在该地方声明的函数.但是,我不想在我的函数定义中超级冗长.
我理想的CoffeeScript会是这样的:
class @MyApp
@myClassMethod = ->
console.log 'This is MyApp.myClassMethod()'
class @Module1
@moduleMethod = ->
console.log 'This is MyApp.Module1.moduleMethod()'
Run Code Online (Sandbox Code Playgroud)
你得到了照片.这样我就可以避免在MyApp.Module.submoduleMethod = ->每次想要正确定义命名空间函数时编写- 在我的类定义中使用@和定义事物可以保持简洁.
这一切都很顺利,直到我想将我的功能分成多个CoffeeScript文件.然后我真正想要的是这样的:
// application.js
class @MyApp
//= require 'module1'
//= require 'module2'
// module1.js
class @Module1
@moduleMethod = ->
console.log 'This is STILL MyApp.Module1.moduleMethod()'
Run Code Online (Sandbox Code Playgroud)
似乎Sprockets不能做到这一点.
是否有一种明智的方法可以将我的CoffeeScript文件放在容器文件中的正确位置?或者另一种方法来编写使用CoffeeScript,Sprockets和Rails 3.1划分为单独文件的模块化代码?
ruby-on-rails coffeescript javascript-namespaces ruby-on-rails-3.1 sprockets
我的组件中有一些如下所示的代码。
<svg id="SvgjsSvg3254" width="318" height="152" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svgjs="http://svgjs.dev/svgjs" class="apexcharts-svg" xmlns:data="ApexChartsNS" transform="translate(0, 0)" style="background: transparent none repeat scroll 0% 0%;">
Run Code Online (Sandbox Code Playgroud)
我收到如下错误
Namespace tags are not supported by default. React's JSX doesn't support namespace tags. You can turn on the 'throwIfNamespace' flag to bypass this warning.
Run Code Online (Sandbox Code Playgroud)
如何打开“throwIfNamespace”标志?
我知道如何编写 Meteor包,但我似乎无法弄清楚如何让所有导出都落在我的应用程序的命名空间中,如本演示文稿中所述.
这个特定的包特定于我正在构建的应用程序,它只导出一个可以被视为应用程序单例的装饰器的方法.我试过api.export('MyApp.myMethod')但是这给了一个错误native: Bad exported symbol: MyApp.myMethod.
如果我只是api.export('myMethod'),那么在我必须调用的应用程序代码中myMethod(),这不是命名空间.
Meteor是否有类似Node的机制var http = require('http');?或者如何将包导出到给定的命名空间?
javascript namespace-organisation global-namespace javascript-namespaces meteor
是否可以命名动态插入的JavaScript文件?
我知道我可以通过创建script标记并将其插入到DOM中来动态地包含JavaScript文件,但是这个包含文件是否可以命名空间?所以,如果文件有一个调用的函数bar,我想通过命名空间访问它,比如foo:ie foo.bar().
我目前正在执行以下操作来为我的javascript代码提供命名空间:
(function(foo, $, undefined) {
// function: showNoteDialog
foo.showNoteDialog = function() {
// ...
}
}(window.foo = window.foo || {}, jQuery));
Run Code Online (Sandbox Code Playgroud)
我更喜欢的不是:
foo.showNoteDialog()
Run Code Online (Sandbox Code Playgroud)
是拥有多级命名空间:
foo.notes.showDialog()
foo.other.showDialog()
Run Code Online (Sandbox Code Playgroud)
这可能吗?我该怎么做?
我目前正面临关于javascript命名空间的争论,我需要一个社区意见.
场景: 负责这个项目的建筑师不知何故致力于RequireJS,并且真的想要使用它.
我必须说应用程序是一个后台,作为向导进行布局,所以你可以在6页上来回使用一些复杂的业务逻辑,最后填写一些我可以描述为进程请求的东西.
好的,没有任何单页应用程序对这些问题没什么好看的.简单的后台Web应用程序,多页面,具有非常复杂的UI,其中每个页面都被请求到服务器,并且必须在页面加载时加载所有资源(css,javascript等).
主要问题:了解我们正在讨论的应用程序类型,为什么要首先使用RequireJS?
第二个问题:为什么试图说服javacript中命名空间的最佳方法是使用RequireJS?我错过了什么吗?
我的意见: 对我来说根本没有意义.在这里使用RequireJS很麻烦,因为没有按需加载资源,它们都是在页面加载时加载的(只是因为我们在页面加载时需要它们).我们至少需要支持IE8,Chrome,Firefox和Opera,而且我们在所有这些浏览器中加载资源时遇到了很多麻烦.已经有很多技巧可以通过Require确保所有内容按预期加载.
对于命名空间来说,情况更糟.当然它再次起作用,对我来说似乎很麻烦,而且这个问题实际上非常有限.
我错过了什么吗?我需要第三(或第100)个意见.
提前致谢
javascript ×8
namespaces ×3
coding-style ×1
coffeescript ×1
jquery ×1
meteor ×1
oop ×1
reactjs ×1
requirejs ×1
scope ×1
sprockets ×1
svg ×1