在$(document).ready(function(){..})中创建“namespace”;

时间:2011-11-22 09:27:41

标签: javascript jquery

// first.js
$(document).ready(function() {
   var MyNamespace = {};
});

// second.js
$(document).ready(function() {
   console.log(MyNamespace);
});

运行此脚本我收到错误Uncaught ReferenceError: MyNamespace is not defined。我想,我收到此错误是因为MyNamespaceMyNamespace调用的定义在不同的范围内。我该如何解决这个问题?

我需要在$(document).ready()包装器中创建命名空间,因为此命名空间中的函数将使用jQuery方法等。

最佳做法是什么?

谢谢!

6 个答案:

答案 0 :(得分:2)

如果您在文档就绪处理程序之外定义变量 -

,它应该可以工作
var MyNamespace = {};
$(document).ready(function() {
    console.log(MyNamespace);
});

答案 1 :(得分:2)

您需要更改两件事:

  1. MyNamespace置于全局范围内;
  2. 避免在每个文件中重新定义 MyNamespace;
  3. 您将var MyNamespace = MyNamespace || {};放在两个js文件的前面。如果之前未定义,则将MyNamespace作为对象进行十进制。

    // first.js
    var MyNamespace = MyNamespace || {};
    $(document).ready(function() {
       console.log(MyNamespace);
    });
    
    // second.js
    var MyNamespace = MyNamespace || {};
    $(document).ready(function() {
       console.log(MyNamespace);
    });
    

答案 2 :(得分:0)

在范围外创建命名空间,然后在范围内向其添加方法:

var MyNamespace = {};

$(document).ready(function() {
   MyNamespace.MyFunction = function () { ... };
});
$(document).ready(function() {
   console.log(MyNamespace);
});

答案 3 :(得分:0)

在外面创建并在里面更新:

var MyNamespace = {};

$(document).ready(function() {
   MyNamespace.Example = new function() { // do something };
});

$(document).ready(function() {
   console.log(MyNamespace);
});

答案 4 :(得分:0)

使用var定义函数的局部变量,该变量在此范围之外不可见。退出var将定义一个全局变量,也可以在另一个函数中访问。一般而言,您应该避免使用全局变量,但如果这就是您所需要的,只需说出MyNamespace = {};

答案 5 :(得分:-1)

使用'window'对象。

$(document).ready(function () {
    window['x'] = 'test';
});
$(document).ready(function () {
    alert(x);
});