2011-08-21 3 views
4

Je me demandais comment on allait faire des "classes" similaires à celles de Python en Javascript. Prenez les classes Python et les fonctions énumérées ici:"Classes" ressemblant à Python en Javascript

class one: 
    def foo(bar): 
     # some code 

La fonction "foo" sera appelée avec one.foo(bar).
Quel serait l'équivalent de JS? Je suppose que ce serait quelque chose comme ceci:

var one = { 
    foo: function(bar) { 
     // JavaScript 
    } 
}; 

Merci.

+6

SO questions ne peuvent pas remplacer un tutoriel/livre tout au long. Allez en prendre un, vous en aurez probablement besoin si vous pensez qu'un littéral d'objet est similaire à une classe ... – delnan

Répondre

9

La façon native de créer des classes en Javascript est d'abord définir le constructeur:

function MyClass() { 
} 

et un prototype:

MyClass.prototype = { 
    property: 1, 
    foo: function(bar) { 
    } 
}; 

Ensuite, vous pouvez créer une instance de MyClass:

var object = new MyClass; 
object.foo(); 

Ajouter des méthodes statiques:

MyClass.staticMethod = function() {}; 

MyClass.staticMethod(); 

Étendre MyClass:

function SubClass() { 
} 
SubClass.prototype = new MyClass; 
SubClass.prototype.bar = function() { 
}; 

var object = new SubClass; 
object.foo(); 
object.bar(); 
6

Jetez un oeil à this link. Il existe différentes façons de faire de la programmation OO en Javascript. Les détails sont trop à expliquer ici.

Si vous êtes sérieux au sujet de la programmation Javascript, vous devriez lire this book.

Si vous voulez faire de la programmation OO lourde, je vous recommande de regarder Coffee Script.

+0

Je viens juste de commencer à jouer avec CoffeeScript, mais jusqu'à présent, j'aime beaucoup son implémentation de classes: http: // jashkenas.github.com/coffee-script/#classes – peterjmag

6

Classy est une bibliothèque JavaScript qui tente d'amener des classes de type Python à JavaScript.

2

Javascript n'a pas vraiment cours. Ce qu'il a est prototypes - une instance d'un objet qui est utilisé comme modèle pour de nouveaux objets.

La façon dont vous avez créé votre objet consiste à utiliser un constructeur littéral. Il est succinct, mais souffre qu'il ne peut pas être ajouté ou utilisé des instructions compliquées dans sa construction.

Une autre façon est comme ceci:

function SomeClass(value) { 
    if (value < 0) { 
     this.field = -1; 
    } else { 
     this.field = value; 
    } 
} 

Et une nouvelle instance est créée comme ceci:

var obj = new SomeClass(15); 

Cela vous permet d'utiliser la logique conditionnelle, pour les boucles et d'autres techniques de programmation plus complexes en construction de votre objet. Cependant, nous ne pouvons ajouter que des champs d'instance et non des champs 'class'. Vous ajoutez des champs de classe en modifiant le prototype de votre fonction de création d'objet.

MyClass.prototype.fieldSquared = function() { 
    return this.field * this.field; 
} 

This donne un aperçu plus complet de la création d'objets et de prototypes en Javascript.