2010-02-08 4 views
6

Selon mon observation, le livre que je lis sur JavaScript indique qu'il y a une POO avec JavaScript? Ça n'en dit pas grand chose, je veux dire qu'on n'a pas expliqué comment définir une classe. Quelqu'un peut-il me donner un extrait d'échantillon?Comment définissez-vous une classe POO en JavaScript?

Merci

+3

quel livre, quel code, pourquoi, quoi, accepter quelques réponses – ant

+2

@Andy E: Six ne sont pas acceptés les questions en une semaine est pas mal. – Gumbo

+0

@Gumbo: Oui, mais il commence comme 6 en une semaine et se développe à partir de cela.Je pense qu'il est préférable d'inviter quelqu'un à marquer certaines réponses le plus tôt possible :-) –

Répondre

1

L'extrait suivant peut vous aider à commencer avec classe moins, des objets basés sur des instances de JavaScript:

function getArea() { 
    return (this.radius * this.radius * 3.14); 
} 

function getCircumference() { 
    var diameter = this.radius * 2; 
    var circumference = diameter * 3.14; 
    return circumference; 
} 

function Circle(radius) { 
    this.radius = radius; 
    this.getArea = getArea; 
    this.getCircumference = getCircumference; 
} 

var bigCircle = new Circle(100); 
var smallCircle = new Circle(2); 

alert(bigCircle.getArea());   // displays 31400 
alert(bigCircle.getCircumference()); // displays 618 
alert(smallCircle.getArea());   // displays 12.56 
alert(smallCircle.getCircumference()); // displays 12.56 

Exemple de: SitePoint - JavaScript Object-Oriented Programming

+1

Votre exemple n'utilise pas du tout l'héritage basé sur un prototype. C'est certainement une façon valide de faire de l'héritage, mais ne prétendez pas qu'il s'agit d'un héritage basé sur un prototype. –

+0

@Keith: Mise à jour de ma réponse: avec une terminologie plus précise ... Néanmoins, je pense que ce qui précède peut encore être considéré comme un exemple de programmation basée sur un prototype: Dans les systèmes prototypes, il existe deux méthodes de construction de nouveaux objets d'un objet existant, et à travers la création d'objet ex nihilo ("à partir de rien"). Source: http://en.wikipedia.org/wiki/Prototype-based_programming#Object_construction –

8

JavaScript est Prototype based et non basée sur la classe.

programmation basé sur un prototype est un style de la programmation orientée objet en les classes ne sont pas présents, et réutilisation du comportement (connu sous le nom d'héritage dans les langues à base de classe) est effectuée par un processus de clonage objets existants qui servent de prototypes. Ce modèle peut également être connu sous le nom de programmation orientée prototype ou . La délégation est la fonctionnalité de langue qui prend en charge la programmation basée sur le prototype .

+0

Mais vous pouvez toujours émuler certains aspects de l'héritage basé sur une classe et lui donner l'impression d'être des classes régulières. http://js-bits.blogspot.com/2010/08/javascript-inheritance-done-right.html –

3

Toute fonction javascript peut être utilisé pour créer un objet:

Exemple:

function MyPoint(x, y) { 
    this.x = x; 
    this.y = y; 
    this.distanceTo = getDistance; 
} 

function getDistance(p) { 
    var dx = this.x-p.x; 
    var dy = this.y-p.y; 
    return Math.sqrt(dx*dx + dy*dy); 
} 

var p0 = new MyPoint(1, 2); 
var p1 = new MyPoint(2, 3); 

window.alert('The distance is ' + p0.distanceTo(p1)); 
1

En JavaScript, tout est un objet. Donc, même une fonction est un objet. Donc, dans js (moins de < version 2), la fonction crée des classes (qui sont elles-mêmes des objets de première classe). Allez here, here et here pour comprendre mieux

2

Voici quelques façons quelques différentes

if (typeof FFX == "undefined") { 
    FFX = {}; 
} 

//Static class 
FFX.Util = ({ 
    return { 
     method:function(){ 
     } 
})(); 

FFX.Util.method(); 



//Instance class 
FFX.Util2 = ({ 
    // private method 
    var methodA=function(){ 
     alert("Hello"); 
    }; 
    return { 
     method:function(){ 
     //Call private method 
     methodA(); 
     } 
}); 
var x= new FFX.Util(); 
x.method(); 

Une autre façon

function MyClass(){ 
} 

/* privileged functions */ 
MyClass.prototype.hello = function(){ 
    alert("Hello"); 
} 

vous pourriez aussi voir comment les classes jquery, prototype et poignée semblables et voir si c'est correspond à vos besoins.

2

Il n'y a pas de façon standard de faire de la POO en JavaScript. Tout le monde utilise des systèmes de classe/instance légèrement différents et la plupart des livres truquent le problème. Voir this question pour une discussion sur les façons de travailler avec OO dans JS et choisissez votre favori.

+0

merci pour le lien sir^_^ – sasori

+0

+1 pour mentionner fudge :) – Mottie

4

Je recommande this book pour une explication concise et précise à la fois de l'utilisation de l'héritage prototypique de JS et de l'émulation de l'héritage OO classique dans JS.

JavaScript: The good parts

+0

Oui. Il y a aussi d'excellentes explications sur le site Web de Douglas Crockford (www.crockford.com). – PeterAllenWebb

+0

merci monsieur, je vais lire ce genre de choses – sasori

+0

Vous pourriez trouver les vidéos qu'il a fait utile, aussi - en voici un couple. http://ajaxian.com/archives/douglas-crockford-video-advanced-javascript http://video.yahoo.com/watch/111593/1710507 –

Questions connexes