He estado trabajando mucho con JavaScript últimamente y he creado algunas colecciones de funciones grandes. He encontrado la necesidad de tener una funcionalidad secundaria que deseo separar de la biblioteca principal y aún así estar incluida en la biblioteca principal, pero aún no he encontrado una manera lo suficientemente elegante para hacer esto.¿Cuál es la sintaxis de un espacio de nombres/clase de JavaScript dentro del espacio de nombre/clase actual?
Aquí hay un par de ejemplos que utilizo en el momento
por lo que suelen configurar mi biblioteca principal como esto
// Main library
var animals = function(settings){
// Main library stuff
}
Para añadir subclases/funcionalidad sub que se encapsulan por separado, pero aún parte de la biblioteca principal ...
Este es el primer método que utiliza la notación literal del objeto
animals.prototype.dogs = {
addDog: function(){
// Can only access the dogs object
var test = this;
},
removeDog: function(){}
}
// Usage of the whole thing
var animalsInstance = new animals({a: 1, b: 3});
animalsInstance.dogs.addDog();
Aunque realmente me gusta la sintaxis de esto, nunca puedo usarlo ya que no hay forma de referenciar la instancia de animales dentro de cualquiera de las funciones dentro del objeto de perros. Así me ocurrió con esta notación como un reemplazo
animals.prototype.dogs = function(){
var parent = this;
return {
addDog: function(){
// The animals instance
var test = parent;
// The dogs instance
var test2 = this;
},
removeDog: function(){}
}
}
// Usage
var animalsInstance = new animals({a: 1, b: 3});
animalsInstance.dogs().addDog();
Aunque ahora puedo obtener acceso a la instancia de los animales desde el interior de toda la funcionalidad de las funciones de sub perros No me gusta mucho la forma poco hacky I' lo he hecho. ¿Alguien tiene algún método más limpio?
http://stackoverflow.com/questions/1595611/how-to-properly-create-a-custom-object-in-javascript#1598077 – zerkms
Gracias, creo que la pregunta que escribí fue miss leading, su enlace explica cómo crear una subclase que hereda los métodos básicos. Creo que lo que busco es una forma de separar diferentes grupos de métodos relacionados bajo su propio tipo de espacio de nombres. Es decir, todas las funciones relacionadas con perros en animals.dogs. [inserte cualquier nombre de método aquí]. Como cuando te metes en 40/50 + funciones, comienza a ser engorroso. Mi ejemplo del mundo real fue para un TreeGrid que estaba desarrollando, cada función era relevante para mantenerlo bajo la clase principal TreeGrid, pero necesitaba separar subsecciones de funcionalidad. – Ally
Si no quiere tener todos los métodos, no use la herencia, use la delegación. – zerkms