2011-04-28 2 views
9

J'ai un peu de mal à comprendre comment mon JavaScript devrait être structuré, etc. Mes compétences POO dans des langages tels que PHP, ActionScript 3 et ainsi de suite sont ce que je suppose être à la hauteur, mais JS manque de ceci ce qui m'a un peu ébranlé dans mon apprentissage.Comment dois-je structurer mon JavaScript?

J'ai une vague compréhension du prototype fonctionnalité que j'ai utilisé un peu en AS2 - je crois que c'est le plus proche que je serai en mesure d'obtenir. En ce moment, je pose mon code similaire à ceci:

var slideshow = 
{ 
    property: value, 

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

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

Tout cela fonctionne bien, mais il est vide ma capacité à faire quelque chose comme:

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

myslideshow1.property = 10; 
myslideshow2.property = 16; 
  1. Je ne suis pas Assurez-vous de créer deux instances différentes d'un "objet" que j'ai créé (dans ce cas, un diaporama).
  2. Je ne trouve aucune ressource expliquant la fonctionnalité du prototype d'une manière logique.

Tous les pointeurs seraient supoib.

Répondre

4

Toute fonction javascript peut agir en tant que constructeur d'une classe, alors essayez ceci:

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

C'est assez cool - donc au lieu de donner un objet mes valeurs, je leur donne à une fonction Au lieu de cela, cela vous semble-t-il correct? – Marty

+0

@marty, à peu près. la 'fonction' agit en tant que classe, vraiment. –

+0

Génie - merci. – Marty

2

Je fronçait les sourcils apon en utilisant un prototype pour ajouter des méthodes à une classe comme il pourrait y avoir des problèmes de performances

Voici un exemple de structure de classe que vous pouvez utiliser. Les classes JavaScript ne sont pas très différentes des fonctions.

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

Merci pour le lien! – Marty

2

Vous devriez éviter d'utiliser le nouvel opérateur, tout est public. Une meilleure façon de faire ce que vous voulez faire, et ont des variables privées et fonctions est de faire ce qui suit:

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

Bonne info - Je suis un grand utilisateur de private dans AS3 etc, mais tout le code supplémentaire le fait paraître à peine la peine. En outre, l'absence de sous-classes/superclasses donne l'impression que le mot-clé private perd une partie de son utilité? – Marty

+1

Vous pouvez facilement faire l'héritage. Au début, au lieu de créer un objet vide, vous pouvez utiliser une autre fonction qui crée un autre objet. – gkz

+0

Une chose importante à garder à l'esprit est que JavaScript n'a pas de classes. Ce n'était pas destiné à avoir des cours. JavaScript n'est pas comme Java, ou C++ de plusieurs façons. Je voudrais lire JavaScript: Les bonnes parties. Vous pouvez trouver un pdf de celui-ci ici: http://eleventyone.done.hu/OReilly.JavaScript.The.Good.Parts.May.2008.pdf Une fois que vous commencez à comprendre JavaScript, vous réaliserez qu'il est en fait un plus langage expressif et puissant que Java ou C++. – gkz

Questions connexes