2011-11-22 73 views
0
// first.js 
$(document).ready(function() { 
    var MyNamespace = {}; 
}); 

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

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

我需要创建命名空间中的$(document)。就绪()的包装,因为这个命名空间功能将使用jQuery方法等

什么是最好的做法是什么?

谢谢!

+0

为什么你使用两个调用'ready()'? – Tomalak

+0

您需要定义文档就绪函数外的变量,然后在函数内分配一个值。或者,取出变种 –

+0

@Tomalak,一个'$(document).ready()'我在'first.js'中使用,另一个在'second.js'中使用 – Kirzilla

回答

2

有两件事情你需要改变:

  1. MyNamespace在全球范围内;
  2. 避免在每个文件中重新定义MyNamespace;

你把var MyNamespace = MyNamespace || {};放在你的两个js文件的前面。如果它之前没有定义,它会将MyNamespace作为对象进行decal。

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

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

创建命名空间的范围之内,那么范围内的方法添加到它:

var MyNamespace = {}; 

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

如果你定义了你的变量文件准备好处理程序之外它应该工作 -

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

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

var MyNamespace = {}; 

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

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

使用var定义av在该范围之外不可见的功能是本地的。离开var会定义一个全局变量,也可以在其他函数中访问。一般来说,你应该避免使用全局变量,但如果这是你所需要的,只需说MyNamespace = {};

-1

使用'窗口'对象。

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