recorrer objetos objeto metodos lista funciones diccionario crear array agregar javascript namespaces

metodos - recorrer array de objetos javascript



Cómo proporcionar espacios de nombres en JavaScript con objetos instanciados (5)

Tengo un "objeto" de JavaScript, construido de esta manera:

function foo() { this.length = 0; } foo.prototype.getLength = function() { return this.length; } ...

Sé cómo emular espacios de nombres con objetos de JavaScript únicos, pero ¿cuál es la mejor manera de "crear un nombre de tabla" de un objeto como el anterior que se integrará?

Sé que varias bibliotecas de JavaScript tienen capacidades de espaciado de nombres, pero estoy usando jQuery y prefiero no agregar otra biblioteca a la mezcla. Me gustaría poder proporcionar la mía, tal vez explotando el esquema de espacios de nombres intrínsecos de jQuery para los objetos JS míos que necesitan ser instanciados.

Gracias rp


No debería ser muy diferente:

namespace.foo = function foo() {...} namespace.foo.prototype.getLength = function() { ... }

o podrías usar

(function() { function foo() { ... } foo.prototype... namespace.foo = foo; })();

para ahorrar algo de tipeo


Sencillo:

if(!MyNamespace) MyNamespace = {}; MyNamespace.foo = function() { this.length = 0; }; MyNamespace.foo.prototype.getLength = function() { return this.length; };


Otra alternativa puede ser el marco de trabajo bob.js :

bob.ns.setNs(''myApp.myFunctions'', { say: function(msg) { console.log(msg); } }); //sub-namespace bob.ns.setNs(''myApp.myFunctions.mySubFunctions'', { hello: function(name) { myApp.myFunctions.say(''Hello, '' + name); } }); //call: myApp.myFunctions.mySubFunctions.hello(''Bob'');


Ambas respuestas fueron muy útiles! Esto es lo que terminé con:

if( typeof( rpNameSpace ) == "undefined" ) rpNameSpace = {}; rpNameSpace.foo = function() { this.length = 613; } rpNameSpace.foo.prototype.getLength = function() { return this.length * 2; }

Luego, para usar el objeto resultante "espacio de nombres":

var x = new rpNameSpace.foo() display( x.getLength() );


Javascript no tiene espacio de nombres ni paquetes como otros idiomas. En cambio, tiene cierres. Si tiene una aplicación que consta de múltiples funciones, variables y objetos, debe colocarlos dentro de un solo objeto global. Esto tendrá el mismo efecto que un espacio de nombres.

Por ejemplo:

var namespace = { this.foo: function(){ ... }, this.foo.prototype.getLength: function(){ ... } }

También puede crear un conjunto de objetos anidados y simular paquetes:

loadPackage = function(){ var path = arguments[0]; for(var i=1; i<arguments.length; i++){ if(!path[arguments[i]]){ path[arguments[i]] = {}; } path = path[arguments[i]]; } return path; } loadPackage(this, "com", "google", "mail") = { username: "gundersen", login: function(password){ ... } } this.com.google.mail.login("mySecretPassword");