2011-04-28 7 views
9

Tengo un pequeño problema para determinar cómo se debe estructurar mi JavaScript, etc. Mi OOP habilidades en lenguajes como PHP, ActionScript 3 y demás son lo que supongo que están a la par, pero JS falta esto, lo que me ha desconcertado bastante en mi aprendizaje.¿Cómo debo ver la estructuración de mi JavaScript?

Tengo una vaga comprensión de la característica del prototipo que utilicé un poco en AS2 - Creo que esto es lo más cerca que podré obtener. Por el momento, estoy por la que mi código similar al siguiente:

var slideshow = 
{ 
    property: value, 

    /** 
    * This is a method 
    */ 
    myMethod: function() 
    { 
     // do method things 
    } 
}; 

// ------ 
slideshow.property ++; 
slideshow.myMethod(); 

Todo esto funciona bien, pero es nula mi capacidad para hacer algo como:

var myslideshow1 = new Slideshow(); 
var myslideshow2 = new Slideshow(); 

myslideshow1.property = 10; 
myslideshow2.property = 16; 
  1. No estoy seguro sobre cómo crear dos instancias diferentes de un "objeto" que he creado (en este caso, presentación de diapositivas).
  2. No encuentro ningún recurso que explique la función del prototipo de manera que tenga sentido.

Cualquier punteros sería supoib.

Respuesta

4

Cualquier función de JavaScript puede actuar como un constructor para una clase, a fin de tratar esto:

function SlideShow(params) { 
    return { 
     property: value, 
     myMethod: function() { 
      //do method things 
     }; 
    }; 
}; 
var slideshow1 = new SlideShow(params); 
slideshow1.property = 10; 
//etc. 
+0

Eso está muy bien - lo que en lugar de dar a un objeto mis valores, les estoy dando a una función en cambio, ¿suena bien? – Marty

+0

@marty, prácticamente. la 'función' está actuando como una clase, realmente. –

+0

Genio - gracias. – Marty

2

me habría fruncir el ceño un check in usando el prototipo de añadir métodos a una clase ya que podría haber problemas de rendimiento

Aquí hay una estructura de clase de muestra que podría usar. Las clases de JavaScript no son muy diferentes a las funciones.

function MyItem(){ 
    this.d = ''; 
    this.clear = function() { 
    this.d = ''; 
    } 
} 
var myItem = new MyItem() 
myItem.d = "test"; 
alert(myItem.d); 
myItem.clear(); 
alert(myItem.d) 

Some good reading here

+0

¡Gracias por el enlace! – Marty

2

Usted debe evitar el uso del nuevo operador, todo es público. Una mejor manera de hacer lo que quiere hacer, y tienen las variables privadas y funciones es hacer lo siguiente:

var slideshow = function() { 
    var self = {}; 
    var private_param = "hello"; 
    var private_func = function(say) { 
     alert(say); 
    }; 
    var method = function() { 
     private_func(private_param); 
    }; 
    var param = 500; 

    self.method = method; 
    self.param = param; 

    return self; 
    // return object, with the method func and param param publicly accessible 
    // private_param and private_func are not accessible to the outside 
}; 

var presentation = slideshow(); // new slideshow, you could edit to pass in init params 
presentation.method(); // hello 
+0

Buena información: soy un gran usuario de private en AS3, etc., sin embargo, todo el código adicional hace que valga la pena. Además, la falta de tener subclases/superclases hace que parezca que la palabra clave privada pierde una parte de su utilidad. – Marty

+1

Puede hacer herencia fácilmente. Al principio, en lugar de hacer que 'yo' sea un objeto vacío, puede usar otra función que crea otro objeto. – gkz

+0

Una cosa importante a tener en cuenta es que JavaScript no tiene clases. No estaba destinado a tener clases. JavaScript no es como Java o C++ en muchos sentidos. Leería JavaScript: Las buenas partes. Puede encontrar un pdf aquí: http://eleventyone.done.hu/OReilly.JavaScript.The.Good.Parts.May.2008.pdf Una vez que comience a comprender JavaScript, se dará cuenta de que de hecho es un lenguaje expresivo y poderoso que Java o C++. – gkz

Cuestiones relacionadas