<%@ Page Language="C#" AutoEventWireup="true" CodeFile="objets_javascript.aspx.cs" Inherits="objets_javascript" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    

</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="scriptManager1" runat="server"></asp:ScriptManager>
    <script language="javascript">                
        // déclaration d'un objet et de deux attributs
        var personne1 = new Object();
        personne1.prenom = "Albert";
        personne1.nom = "Dumont";

        alert(personne1.prenom + " " + personne1.nom);

        // ajout de méthodes à un objet
        personne1.presentation = function (autreNom) {
            alert("Bonjour " + autreNom + ", je suis " + this.prenom);
        }
        personne1.presentation("Dona");


        // déclaration d'un namespace
        Type.registerNamespace("annuaire");        

// déclaration d'une classe
annuaire.Personne = function(prenom, nom) {
    // attributs (privés)
    var _prenom = prenom, _nom = nom,_age;

    // accesseurs (publics)
    this.set_prenom = function (value) {
        _prenom = value;
    }
    this.get_prenom = function () {
        return _prenom;
    }
    this.set_nom = function (value) {
        _nom = value;
    }
    this.get_nom = function () {
        return _nom;
    }            
}

// méthodes publiques
annuaire.Personne.prototype.sePresenter = function () {
    alert(this.get_prenom() + " " + this.get_nom());
}

// instanciation
var personne2 = new annuaire.Personne("Simone", "Lejean");
//alert(personne2.get_prenom() + " " + personne2.get_nom());
//personne2.sePresenter();

// enregistrement de la classe              
annuaire.Personne.registerClass("annuaire.Personne");
//alert(Object.getTypeName(personne2));
       

// autre style
Type.registerNamespace("ecran");

// constructeur
ecran.Point = function (x, y) {
    // données privées
    this._x = x;
    this._y = y;
}

// définition déportée des méthodes publiques
function ecran$Point$set_x(value) {
    this._x = value;
}
function ecran$Point$get_x() {
    return this._x;
}
function ecran$Point$set_y(value) {
    this._y = value;
}
function ecran$Point$get_y() {
    return this._y;
}

// composition des méthodes publiques
ecran.Point.prototype = {
    set_x: ecran$Point$set_x,
    get_x: ecran$Point$get_x,
    set_y: ecran$Point$set_y,
    get_y: ecran$Point$get_y
};

// enregistrement de la classe
ecran.Point.registerClass("ecran.Point");

// instanciation et test
var p = new ecran.Point(5, 10);
//alert(p.get_x());

// classe dérivée
ecran.PointColore = function (x, y, couleur) {
    ecran.PointColore.initializeBase(this, [x, y]);
    this._couleur = couleur;
}

ecran.PointColore.prototype.set_couleur = function(value) {
    this._couleur = value;
}

ecran.PointColore.prototype.get_couleur = function() {
    return this._couleur;
}

// rattachement de la classe PointColore comme dérivant de Point
//ecran.PointColore.registerClass("ecran.PointColore", ecran.Point);

        // version avec implémentation d'une interface
        ecran.PointColore.prototype.dispose = function () {
            alert("Relâché");
        }
        ecran.PointColore.registerClass("ecran.PointColore", ecran.Point, Sys.IDisposable);

        // instanciation et test
        var pc = new ecran.PointColore(1, 2, "#00FF00");
        alert(pc.get_x() + " " + pc.get_y() + " " + pc.get_couleur());
        pc.dispose();
        
    </script>
    <div>
    
    </div>
    </form>
</body>
</html>
