JavaScript - les Objets

Cliquez sur le code d'un exemple pour l'inscrire dans la fenêtre en bas de page
Cliquez sur le bouton [Exécute le code].
Modifiez le code ou composez votre propre code pour vous exercer.

Classes

Les classes en Javascript ne permettent pas l'héritage ni la création de sous-classes. Elles sont souvent appelées objets.

[1]  Suite de Syracuse :

La déclaration d'une classe commence par le mot clé function suivi du nom de la classe et d'une liste de paramètres (arguments). Les affectations, instructions et les définitions de méthodes sont ensuite placées entre deux accolades

function syracuse(n) {...} Le nom de la classe est 'syracuse', le seul paramètre est n.
function syracuse(n) {
  this.debut=n;
  this.sommet=n;
  this.haut=0;
  this.altitude=0;
  var x=n;
  for(var i=0;x>1;i++) {
    if(x%2==0){
     x /=2;
     if(this.altitude==0 && xthis.sommet) this.sommet = x;
    }
  }
  this.delai = i;
}
  
var k= prompt("valeur du paramètre n = ","27");
var z = new syracuse(k);
alert("premier terme : "+z.debut+"\nsommet : "+z.sommet+"\ndurée du vol : "+
       z.delai+"\nvol en altitude : "+z.altitude+"\nmontées : "+z.haut+"\n");

En écrivant var z = new syracuse(k); on crée une instance z de la classe syracuse, le mot-clé new permet d'allouer un emplacement en mémoire pour cet objet.
Les propriétés sont
z.debut : l'entier de départ,
z.sommet : la valeur la plus élevée obtenue,
z.haut : nbre de montées,
z.altitude : durée du vol en altitude,
z.delai : durée.

Applet java permettant de voir les trajectoires.
Page de liens sur le problème de Syracuse-Collatz-Kakutani

[2]  a href="javascript:exmple(2);">Triangle :

propriétés
a, b, c
méthode
perimetre() calcule le périmètre du triangle.

function triangle(a, b, c) {
  if(a+b < c || a+c < b || b+c < a || a < 0 || b < 0 || c < 0) {
    this.ok=false;
  } else {
    this.ok=true;
    this.a = a;
    this.b = b;
    this.c = c;
  }
  function perimetre() {
    return this.a+this.b+this.c;
  }
  this.perimetre = perimetre;
}

var a= prompt("côté a = ","10");
var b= prompt("côté b = ","7");
var c= prompt("côté c = ","5");
var z = new triangle(a, b, c);
var p = z.perimetre();
alert("Périmètre : " + p + "\n");

[3]  a href="javascript:exmple(3);">Entier :

Propriété
n : l'entier
Méthodes associées au nombre entier
pgcd() : n.pgcd(a) détermine le pgcd de n et de a
ppdiv() : le plus petit diviseur (autre que 1, lorsque n >1)
estpremier() : premier ou non.

function nbre(n) {
  this.n=n;
  // pgcd du nombre et de b
  this.pgcd = function(b) {
    var u=this.n,v=b, w;
    u=Math.abs(u);v=Math.abs(v);
    if(u<v) {w = u;u=v;v=w;}
    while(v != 0) {w=u%v;u=v;v=w;}
    return u;
  }
  // plus petit diviseur autre que 1
  this.ppdiv = function () {
    if(this.n%2==0) return 2;
    for(var i=3;i*i<=this.n;i += 2) 
      if(this.n% i ==0) return i;
    return this.n;
  }
  this.estpremier = function () {
    return(this.ppdiv() == this)
  }
}
//ppcm (méthode ppcm ajoutée ensuite à l'objet nbre)
nbre.prototype.ppcm = function(b) {
        var c = this.pgcd(b);
        return this.n*b/c
}
// propriété ajoutée ensuite
nbre.prototype.un = 1;

var a = prompt("Un entier n",""),
    n= new nbre(a),
    b = prompt("Deuxième entier b","");
var z = n.pgcd(b);
    alert("Le pgcd de "+n+" et de "+ b +" est " + z);
var u = n.ppdiv();
    alert("Le plus petit diviseur de "+n+" autre que 1 est "+ u);
alert("Le ppcm de "+a+" et de "+b+" est " + m.ppcm(b));
alert("un = "+m.un);

Remarquez la nouvelle notation équivalente :
this.pgcd = function(b) {
...
}

au lieu de celle utilisée dans l'exemple précédent, qui aurait donné ici
function pgcd(b) {
...
}

Enfin une troisième possibilité permet d'ajouter à posteriori des propriétés ou des méthodes aux objets.
Elle a été utilisée ici pour ajouter la méthode "ppcm" à l'objet "nbre" :
nbre.prototype.ppcm = function(b) { var c = this.pgcd(b) return this.n*b/c }

vous pourriez ajouter une propriété "un" ainsi :
nbre.prototype.un = 1;



       





[Sommaire]  [Début]  [Fin]      <-  1  2  3  4  5  6  7  8  9  -> 
















Pour un premier contact, [utilisez ce formulaire] ou utilisez l'adresse de messagerie qui y figure. Merci d'indiquer la page précise du site "http//jm.davalan.org/...", cela m'aidera beaucoup. Ne joignez aucun document à votre message.
Jeux-et-Mathématiques n'est pas un site commercial. Aucun des liens placés sur ce site n'est rémunéré, ni non plus aucune des informations données.
Important : Si votre question a un quelconque rapport avec un travail personnel (Devoir TIPE Master...) , vous devez absolument me le préciser dès votre premier message et m'indiquer très précisément les limites des informations demandées. Vous devez aussi avertir la personne qui dirige éventuellement votre travail ou le corrige de cette communication et lui montrer les documents fournis.

J'essaie de répondre aux questions posées, mais ne lis pas les documents mathématiques amateurs, pas plus que je ne donne mon avis sur les démonstrations des conjectures de Collatz ou autres. Je ne lis pas les documents word, je ne corrige pas les programmes informatiques et depuis des années je n'utilise plus de tableur.

© (Copyright) Jean-Paul Davalan 2002-2014