2010-07-16 37 views
5

我剛剛發現了在javascript中創建假'類'的方法,但我不知道如何存儲它們並仍然可以在IDE中輕鬆訪問其功能。javascript中強類型容器的更好選擇

像這樣:

function Map(){ 
    this.width = 0; 
    this.height = 0; 
    this.layers = new Layers(); 
} 

現在我已經得到了通過XML循環,並創建多個地圖()對象的功能。 如果我把它們存儲在單個變量下,我可以訪問它們就好了,如:

map1 = new Map(); 
map1.height = 1; 

但我不知道他們會被保存在什麼名字! 所以我想我能拯救他們這樣的:

mapArray = {}; 
mapArray['map1'] = new Map(); 

但你不能訪問這樣的功能:(至少IDE代碼完成不會把它撿起來)

mapArray['map1'].height = 1; 

那麼我想這是最好的解決辦法:

function fetch(name){ 
    var fetch = new Map(); 
    fetch = test[name]; 
} 

這樣,我可以這樣寫:

fetch('test').height = 1; 

但是,這似乎會產生大量的開銷不斷拷貝這樣的變量。

我可以忽略一些簡單的東西嗎?

+0

你真的想要依靠IDE代碼完成嗎? – 2010-07-16 17:14:37

+0

-1我很抱歉,但您需要在瀏覽器中測試您的JS,而不是在IDE中! – 2010-07-16 17:15:30

+0

這不是關於代碼是否正確,我知道這是正確的,但它不會自動完成,我只是想知道是否有更好的方法來做到這一點。 – skerit 2010-07-16 17:17:09

回答

4

它不起作用的原因是,爲了使地圖/數組允許裏面的任何東西,它只能假定裏面的東西在繼承樹上至多是一個非常低級的東西。不幸的是,與Actionscript中的Vector<>和代理對象以及其他語言中的類似事情不同,這在Javascript中不容易實現。

How would you overload the [] operator in javascript

你擁有的解決方案,如果這就是你想要什麼功能,是你可以做最簡單的。您也可以製作一個.get(whatever)函數,該函數返回[whatever],但具體爲您想要的類型。你也可以製作一個.set(whatever,value)。但是,它不會阻止代碼在使用[]時推翻事物。

一方面,過度依賴IDE爲你做這件事並不是一個好主意,但試圖更好地強調事情並不是一個壞主意。

更新:

要回答您的其他問題...首先,能夠輕鬆測試簡單的JS的東西,這是很好的使用命令行版本:

http://blog.thefrontside.net/javascript/learning-javascript-from-the-command-line

https://developer.mozilla.org/en/SpiderMonkey_Build_Documentation

現在,我也不建議你這樣做只是爲了破解IDE,但只是爲了顯示「的方式」來做到這一點:

# js 
js> function FooDataClass(){ this.data = "argh!"; } 
js> function FooClass(){ this.get = GetStuff; this.put = PutStuff; this.stuff = new FooDataClass(); } 
js> function PutStuff(name,stuff){ this[name]= this.stuff = stuff; }  
js> function GetStuff(name){ return this.stuff = this[name]; }  
js> f = new FooClass()  
[object Object] 
js> f.put('bar', new FooDataClass())  
js> f.get('bar')  
[object Object] 
js> f.get('bar').data 
argh! 
js> 

威力假冒你的IDE爲您服務。

+0

哦,所以像「功能獲取(名稱){this.get = function(){alert('Name:'+ maps [name]);};}」?嗯,當你調用fetch(「something」)時,這似乎不起作用。 (或.get())。 或者我必須首先創建一個變量? – skerit 2010-07-16 18:39:04

+1

更新了答案... – eruciform 2010-07-16 19:41:42

1

另一種方法是使用編譯爲JavaScript的強類型語言。 ST-JS是一款Maven插件,與Eclipse集成,允許您使用Java編寫代碼。每次保存文件時都會生成相應的JavaScript代碼。通過使用Java作爲您的原始語言,IDE可以很好地支持代碼自動完成,重構和瀏覽執行路徑。

您不需要學習太多,因爲您需要知道的API與您在JavaScript中使用的API完全相同:DOM或jQuery。只有他們以強烈的方式呈現。