Hallo
Ik heb nogal veel script in mijn huidige project en werk daardoor met zogenaamde namespaces (in feite objecten).
Om het mezelf makkelijker te maken (kijken als namespace al bestaat, en functie aanmaken in desbetreffende object) heb ik het window object een "namespace"-functie.
Dit stelt me in staat om het volgende te vervangen:
ik = ik || {};
ik.ben = ik.ben || {};
... enzovoort
door:
namespace("ik.ben.een.namespace").Person = function() { }
Nu de probleemomschrijving:
Gebruik in views en/of lokale script(files): var p = new ik.ben.een.namespace.Person();
Als je vervolgens "p" intikt in de chrome console: krijg je de constructor/object type te zien, dacht ik.
In dit geval zal dat "namespace.Person" zijn en niet "ik.ben.een.namespace.Person".
Dit laatste kan je wel bekomen indien je hetvolgende doet:
namespace("ik.ben.een.namespace");
ik.ben.een.namespace.Person = function() { }
Maar op deze manier verlies je al de helft van het gemak.
Concreet, de vraag: iemand die hier meer info over kan geven?
Ik heb dus geen directe technische problemen, alleen een informatie request
Ik heb nogal veel script in mijn huidige project en werk daardoor met zogenaamde namespaces (in feite objecten).
Om het mezelf makkelijker te maken (kijken als namespace al bestaat, en functie aanmaken in desbetreffende object) heb ik het window object een "namespace"-functie.
JavaScript:
1
2
3
4
5
6
7
8
9
10
| function namespace(input) { var names = input.split('.').reverse(); (function makeNamespace(currentObject, childObjectName) { if (currentObject && childObjectName) { currentObject[childObjectName] = currentObject[childObjectName] || {}; makeNamespace(currentObject[childObjectName], names.pop()); } })(window, names.pop()); return eval(input); } |
Dit stelt me in staat om het volgende te vervangen:
ik = ik || {};
ik.ben = ik.ben || {};
... enzovoort
door:
namespace("ik.ben.een.namespace").Person = function() { }
Nu de probleemomschrijving:
Gebruik in views en/of lokale script(files): var p = new ik.ben.een.namespace.Person();
Als je vervolgens "p" intikt in de chrome console: krijg je de constructor/object type te zien, dacht ik.
In dit geval zal dat "namespace.Person" zijn en niet "ik.ben.een.namespace.Person".
Dit laatste kan je wel bekomen indien je hetvolgende doet:
namespace("ik.ben.een.namespace");
ik.ben.een.namespace.Person = function() { }
Maar op deze manier verlies je al de helft van het gemak.
Concreet, de vraag: iemand die hier meer info over kan geven?
Ik heb dus geen directe technische problemen, alleen een informatie request
[ Voor 3% gewijzigd door SideShow op 12-11-2012 16:16 ]