Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
命名空间类似jQuery的大型javascript_Javascript_Jquery - Fatal编程技术网

命名空间类似jQuery的大型javascript

命名空间类似jQuery的大型javascript,javascript,jquery,Javascript,Jquery,我有一个非常大的javascript文件:超过9000行。代码如下所示: var GlobalVar1 = ""; var GlobalVar2 = null; function A() {...} function B(SomeParameter) {...} (function($) { $.a = function() { ... } $.b = 1000; })(myNamespace); myNamespace.a( ... ); 我正在使用google编译器,全局变

我有一个非常大的javascript文件:超过9000行。代码如下所示:

var GlobalVar1 = "";
var GlobalVar2 = null;

function A() {...}

function B(SomeParameter) {...}
(function($) {
  $.a = function() { ... }
  $.b = 1000;
})(myNamespace);

myNamespace.a( ... );
我正在使用google编译器,全局变量和函数被重命名为a,b,c。。。还有一个很好的变化,就是以后可能会与一些外部代码发生冲突

我想做的是让我的代码像jquery库一样组织起来,在这里所有的东西都可以通过$访问。有没有一种方法可以给我的代码命名,使所有内容都隐藏在一个#字符后面

我想让它调用我的代码:

#.GlobalVar
#.functionA(SomeParameter)
我该怎么做

var $$ = {
    A: function() {
        alert('namespace rules!');
    },
    B: function() {
        alert('foo');
    }
}
$$.A();
$$.B();
​

​​​​​​​​​​等等

请注意,我从
#
更改为
$
,因为
#
在非法toke中用于变量名

var # = {
    GlobalVar1: "",
    GlobalVar2: null,

    A: function() {

    },

    B: function(SomeParameter) {

    }
}

​​​​​​​​​​等等

请注意,我从
#
更改为
$
,因为
#
在非法tok中用于变量名。

旁注:
#
字符不是有效的变量名(请参阅)。常见的“速记”是下划线
\uu
和美元
$
。我记得读到过,美元的使用是为了机器生成的代码,但这在很大程度上被忽略了,正如您在jQuery中看到的那样

var # = {
    GlobalVar1: "",
    GlobalVar2: null,

    A: function() {

    },

    B: function(SomeParameter) {

    }
}
最常见的技术如下所示:

var GlobalVar1 = "";
var GlobalVar2 = null;

function A() {...}

function B(SomeParameter) {...}
(function($) {
  $.a = function() { ... }
  $.b = 1000;
})(myNamespace);

myNamespace.a( ... );
无论哪种方式,我认为您必须在代码中为某个变量赋值

或者,您可以指定类似于类的内容:

function MyClass() {
  var f = 0;

  function a() { return f; }
  function b(value) { f = value; }
  function c() { f *= f; }

  this.get = a;
  this.set = b;
  this.square = c;
}

var myInstance = new MyClass();
旁注:
#
字符不是有效的变量名(请参阅)。常见的“速记”是下划线
\uu
和美元
$
。我记得读到过,美元的使用是为了机器生成的代码,但这在很大程度上被忽略了,正如您在jQuery中看到的那样

最常见的技术如下所示:

var GlobalVar1 = "";
var GlobalVar2 = null;

function A() {...}

function B(SomeParameter) {...}
(function($) {
  $.a = function() { ... }
  $.b = 1000;
})(myNamespace);

myNamespace.a( ... );
无论哪种方式,我认为您必须在代码中为某个变量赋值

或者,您可以指定类似于类的内容:

function MyClass() {
  var f = 0;

  function a() { return f; }
  function b(value) { f = value; }
  function c() { f *= f; }

  this.get = a;
  this.set = b;
  this.square = c;
}

var myInstance = new MyClass();

您必须将所有库包装在一个闭包中,以保护您的局部变量。要全局访问的成员应指定给全局上下文对象(在浏览器中是
窗口


您必须将所有库包装在一个闭包中,以保护您的局部变量。要全局访问的成员应指定给全局上下文对象(在浏览器中是
窗口


如果您已经在使用闭包编译器,另一种方法是使用它的特性来处理名称空间

例如:

mylib.js

goog.provide('mynamespace.whatever');

var globalVar1='foo';

mynamespace.whatever.functionA=function(txt){
    alert('A: '+txt+' '+globalVar1);
};

mynamespace.whatever.functionB=function(){
    alert('B: '+txt+' '+globalVar1);
};
goog.require('mynamespace.whatever');

mynamespace.whatever.functionA('hello world');
main.js

goog.provide('mynamespace.whatever');

var globalVar1='foo';

mynamespace.whatever.functionA=function(txt){
    alert('A: '+txt+' '+globalVar1);
};

mynamespace.whatever.functionB=function(){
    alert('B: '+txt+' '+globalVar1);
};
goog.require('mynamespace.whatever');

mynamespace.whatever.functionA('hello world');

如果要在编译代码之外使用未模糊的函数/变量,可以使用:

goog.exportProperty(object, publicName, symbol)


看看:

如果您已经在使用闭包编译器,另一种方法是使用它的特性来处理名称空间

例如:

mylib.js

goog.provide('mynamespace.whatever');

var globalVar1='foo';

mynamespace.whatever.functionA=function(txt){
    alert('A: '+txt+' '+globalVar1);
};

mynamespace.whatever.functionB=function(){
    alert('B: '+txt+' '+globalVar1);
};
goog.require('mynamespace.whatever');

mynamespace.whatever.functionA('hello world');
main.js

goog.provide('mynamespace.whatever');

var globalVar1='foo';

mynamespace.whatever.functionA=function(txt){
    alert('A: '+txt+' '+globalVar1);
};

mynamespace.whatever.functionB=function(){
    alert('B: '+txt+' '+globalVar1);
};
goog.require('mynamespace.whatever');

mynamespace.whatever.functionA('hello world');

如果要在编译代码之外使用未模糊的函数/变量,可以使用:

goog.exportProperty(object, publicName, symbol)


请查看:

#
在javascript标识符名称中不是有效字符。对于“名称空间”,请查看模块模式。全局变量转换为局部变量SE并通过闭包访问。“名称空间”之外应该可用的其他变量和函数作为单个全局对象的属性保存。但是,您可以使用$和u,它们都是有效字符(链接问题更普遍适用)
在javascript标识符名称中不是有效字符。对于“名称空间”,请查看模块模式。全局变量转换为局部变量SE并通过闭包访问。“名称空间”之外应该可用的其他变量和函数作为单个全局对象的属性保存。但是,您可以使用$和u,它们都是@Thilo的有效字符(链接问题更普遍适用)的副本。这是一个例子。。。但我编辑,只为你…:-)好的,然后在我的代码中,我不写functo(SomeParameter),而是通过写$.A调用函数,如果我想访问当前的全局变量,我写$.MyGlobal=3;而不是MyGlobal=3?如果#不好,美元已经被拿走,那么有什么好的选择?是@或%还是&更好?@frenchie。那
$$
呢?顺便说一下,您可以调用命名空间
frenchie
,它比它更酷,然后
$
..)@Thio你的意思是什么?jQuery不在乎Prototype.js在采用$character时已经普及了它的使用。尽管我同意这是一个错误的选择,因为它没有提供任何关于它的含义的信息。@Thilo。这是一个例子。。。但我编辑,只为你…:-)好的,然后在我的代码中,我不写functo(SomeParameter),而是通过写$.A调用函数,如果我想访问当前的全局变量,我写$.MyGlobal=3;而不是MyGlobal=3?如果#不好,美元已经被拿走,那么有什么好的选择?是@或%还是&更好?@frenchie。那
$$
呢?顺便说一句,您可以调用名称空间
frenchie
,这比
$
酷多了……)@Thio你的意思是什么?jQuery不在乎Prototype.js在采用$character时已经普及了它的使用。虽然我同意这是一个错误的选择,因为它没有提供任何关于它意味着什么的信息;您还可以执行函数测试(){}var foo=new Test();$字符用于ECMA-262第3版中机器生成的代码。我认为Prototype.js是第一个在标识符中推广使用它的人(可能是为了模仿原作者更熟悉的其他语言中的变量名)。jQuery从那里借用了它。$character是inten