Я только что обнаружил способ создать поддельные 'классы' в JavaScript, но интересно, как можно сохранить их и все еще получить легкий доступ к их функциям в IDE.
Как это:
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;
Но это кажется, что генерирует много служебных непрерывно переменные копирования как этот.
Я пропускаю что-то простое?
Причина, по которой это не работает, заключается в том, что для того, чтобы карта / массив позволяли что-либо внутри себя, он должен предполагать только то, что вещи внутри являются в лучшем случае очень низкоуровневыми объектами. на дереве наследования. К сожалению, в отличие от Vector <>
и прокси-объектов в ActionScript и подобных вещей на других языках, это непросто сделать в Javascript.
Как бы вы перегрузили оператор [] в javascript
Решение, которое у вас есть, если вам нужна такая функциональность, является самым простым из возможных. Вы также можете создать функцию .get (something)
, которая возвращает то, что есть [something]
, но конкретно того типа, который вам нужен. И вы также можете создать .set (что угодно, значение)
. Однако это не остановит код от использования []
.
С одной стороны, не стоит слишком сильно полагаться на среду 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 для вас.