我刚刚发现了在javascript中创建假“类”的方法,但我想知道如何存储它们并且仍然可以在IDE中轻松访问它们的功能。
像这样:
function Map(){
this.width = 0;
this.height = 0;
this.layers = new Layers();
}
现在我有了一个循环XML并创建多个Map()对象的函数。 如果我将它们存储在单个变量下,我可以很好地访问它们,例如:
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 :(得分:4)
它不起作用的原因是,为了使map / array允许其中的任何内容,它必须只假设内部的东西在继承树上最多是一个非常低级的东西。不幸的是,与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。
答案 1 :(得分:1)
另一种方法是使用编译为JavaScript的强类型语言。 ST-JS是一个Maven插件,它与Eclipse集成,允许您用Java编写代码。每次保存文件时都会生成相应的JavaScript代码。通过使用Java作为原始语言,IDE可以很好地支持代码自动完成,重构,浏览执行路径。
您不需要学习太多,因为您需要知道的API正是您在JavaScript中使用的API:DOM或jQuery。只有他们以强烈的方式呈现。