2011-11-22 70 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); 
}); 
相關問題