Accueil > > > LE SUPER DE JAVA, EN JAVASCRIPT .... LA SUPER CLASS ;)
LE SUPER DE JAVA, EN JAVASCRIPT .... LA SUPER CLASS ;)
Information sur la source
Description
la fonction pour créer une class est createClass, mais peux ètre renomé. liste des arguments de createClass: - le constructeur, - le prototype, - une super classe - un objet en plus à étendre au prototype dont les méthodes n'utilise pas Self ou Super Dans vos méthodes vous pourrez donc faire un appel à la super classe, via Super() : liste des arguments de Super: - la propriété a appeler ou retourner - le contexte - un tableau d'arguments à passer à la méthode et aussi à Self, qui renvoie non pas le constructeur de l'instance (appel static classique en js), mais du constructeur de la classe définissant la méthode appelé. liste des arguments de Self: - la propriété a appeler ou retourner - un tableau d'arguments à passer à la méthode Les appels static sont fais classiquement, via le constructeur, exemple : this.constructor.maMéthodeStatique(); j'allais oublié, les méthodes static peuvent être mit dans l'objet prototype, (2ème arguments de createClass) avec en préfixe 'static_', regarder l'exemple. bye
Source
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
- <head>
- <title>IDClass</title>
- <style></style>
- <script type="text/javascript">
- createClass = function(){
- // variable et méthode privées
- //enregistre dans le prototype les propriété d'un objet (ex maClass.implement({prop : valeur})
- //se nomme ainsi pour pas utiliser extend qui porterais encore plus a confusion , il ne s'agit pas d'interface!!
- function implement(o){
- for(var i in o){
- if(/^static_/.test(i)){
- this[i.replace(/^static_/, '')] = o[i];
- }else this.prototype[i] = o[i];
- }
- }
-
- var nfn,//string d'une foncyion à évaluer
- have;//si on doit déclarer les fonction Super et Self
- //retourn si la proriété est une méthode et si elle utilise Super ou Self
- function chk(fn){
- if(typeof fn == 'function' && /Self|Super/.test(nfn = fn.toString())){
- have = true;
- return true;
- }
- }
- return function(_constructor, _prototype, _super, _implements){
- have = false;
- //réévalue le constructeur, si il utilise Super ou Self , accéssible que depuis cette appel de fonction
- _constructor = chk(_constructor) ? eval('[' + nfn + ']')[0] : _constructor || function(){};
- _prototype =_prototype || {};
- //réévalue toute les méthodes , si elles utilisent Super ou Self ,
- for(var i in _prototype)
- _prototype[i] = !/^static_/.test(i) && chk(_prototype[i]) ? eval('[' + nfn + ']')[0] : _prototype[i];
- //si une ou plus de méthode appel Super ou Self
- if(have){
- var Super = function(prop, inst, args){
- var re = prop == 'constructor' ? _super : _super.prototype[prop];
- if(typeof re == 'function')
- return re.apply(inst, args || []);
- return re;
- }
- var Self = function(prop, args){
- var re = _constructor[prop];
- if(typeof re == 'function')
- return re.apply(null, args || []);
- return re;
- }
- }
- //ajout la méthode static implement
- _constructor.implement = implement;
- //gestion native d'extension d'une class, qui permet le polymorphisme via instanceof
- if(_super){
- var t=function(){};
- t.prototype = _super.prototype;
- _constructor.prototype = new t();
- _constructor.prototype.constructor = _constructor;
- }
- //ajoute les prop du prototype
- _constructor.implement(_prototype);
- //ajoute les prop en plus, qui n'appel pas de super ou self
- if(_implements)
- _constructor.implement(_implements);
- return _constructor;
- }
- }();
-
- //ATTENTION !! une fois vaux classe déclaré, il n'est plus possible de rajouter des méthodes devant appeler un super ou self..
-
- var test1 = createClass(function(){
- alert('constructor1');
- Self('test');
- this.constructor.test(true);
- },{
- fntest : function(){
- alert('fnTest1');
- },
- static_test : function(){
- alert('staticTest1 --- appel par self');
- }
- }
- );
- var test2 = createClass(function(){
- alert('constructor2');
- Super('constructor', this);
- Self('test');
- },{
- fntest : function(){
- alert('fnTest2');
- },
- static_test : function(){
- alert('staticTest2 --- appel par self');
- }
- }, test1);
-
- var test3 = createClass(function(){
- alert('constructor3');
- Super('constructor', this);
- Self('test');
- },{
- fntest : function(){
- alert('fnTesn3');
- },
- static_test : function(bys){
- alert(bys ? 'staticTest3 --- appel static classique via le consructeur' : 'staticTest3 --- appel par self');
- }
- }, test2);
- var obj1 = new test3;
-
- //garde la gestion native du polymorphisme
- alert(obj1 instanceof test1);
- </script>
-
- </head>
- <body>
- </body>
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>IDClass</title>
<style></style>
<script type="text/javascript">
createClass = function(){
// variable et méthode privées
//enregistre dans le prototype les propriété d'un objet (ex maClass.implement({prop : valeur})
//se nomme ainsi pour pas utiliser extend qui porterais encore plus a confusion , il ne s'agit pas d'interface!!
function implement(o){
for(var i in o){
if(/^static_/.test(i)){
this[i.replace(/^static_/, '')] = o[i];
}else this.prototype[i] = o[i];
}
}
var nfn,//string d'une foncyion à évaluer
have;//si on doit déclarer les fonction Super et Self
//retourn si la proriété est une méthode et si elle utilise Super ou Self
function chk(fn){
if(typeof fn == 'function' && /Self|Super/.test(nfn = fn.toString())){
have = true;
return true;
}
}
return function(_constructor, _prototype, _super, _implements){
have = false;
//réévalue le constructeur, si il utilise Super ou Self , accéssible que depuis cette appel de fonction
_constructor = chk(_constructor) ? eval('[' + nfn + ']')[0] : _constructor || function(){};
_prototype =_prototype || {};
//réévalue toute les méthodes , si elles utilisent Super ou Self ,
for(var i in _prototype)
_prototype[i] = !/^static_/.test(i) && chk(_prototype[i]) ? eval('[' + nfn + ']')[0] : _prototype[i];
//si une ou plus de méthode appel Super ou Self
if(have){
var Super = function(prop, inst, args){
var re = prop == 'constructor' ? _super : _super.prototype[prop];
if(typeof re == 'function')
return re.apply(inst, args || []);
return re;
}
var Self = function(prop, args){
var re = _constructor[prop];
if(typeof re == 'function')
return re.apply(null, args || []);
return re;
}
}
//ajout la méthode static implement
_constructor.implement = implement;
//gestion native d'extension d'une class, qui permet le polymorphisme via instanceof
if(_super){
var t=function(){};
t.prototype = _super.prototype;
_constructor.prototype = new t();
_constructor.prototype.constructor = _constructor;
}
//ajoute les prop du prototype
_constructor.implement(_prototype);
//ajoute les prop en plus, qui n'appel pas de super ou self
if(_implements)
_constructor.implement(_implements);
return _constructor;
}
}();
//ATTENTION !! une fois vaux classe déclaré, il n'est plus possible de rajouter des méthodes devant appeler un super ou self..
var test1 = createClass(function(){
alert('constructor1');
Self('test');
this.constructor.test(true);
},{
fntest : function(){
alert('fnTest1');
},
static_test : function(){
alert('staticTest1 --- appel par self');
}
}
);
var test2 = createClass(function(){
alert('constructor2');
Super('constructor', this);
Self('test');
},{
fntest : function(){
alert('fnTest2');
},
static_test : function(){
alert('staticTest2 --- appel par self');
}
}, test1);
var test3 = createClass(function(){
alert('constructor3');
Super('constructor', this);
Self('test');
},{
fntest : function(){
alert('fnTesn3');
},
static_test : function(bys){
alert(bys ? 'staticTest3 --- appel static classique via le consructeur' : 'staticTest3 --- appel par self');
}
}, test2);
var obj1 = new test3;
//garde la gestion native du polymorphisme
alert(obj1 instanceof test1);
</script>
</head>
<body>
</body>
Historique
- 15 février 2009 22:28:52 :
- abandon de la technique des porté des variables , au profit de la fonction arguments.callee.caller , testé sous opéra, ie7 ,chrome, ff3
- 15 février 2009 23:46:12 :
- ...
- 15 février 2009 23:49:44 :
- ...
- 21 août 2009 13:26:20 :
- ...
- 21 août 2009 13:39:59 :
- ...
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
réaffecter self.focus() à un popup chargé [ par tikehau ]
Tikehau j'ai mis un <BODY onBlur="self.focus();"> dans ma page mais je veux tout de même entrer des données dans les champs du formulaire de ma
self.close(); avec Mozilla [ par Trinita16 ]
Slt,lors du clique sur un bouton contenant la méthode self.close(), la fenetre se ferme correctement mais ne me renvoit pas vers le form déclaré ????V
self.close() : pb [ par funghi ]
salut à tous les codeurs !voila, j'ai un chtit pb de rien du tout mais que je n'arrive pas a regler : lorsque l'instruction self.close() est appellé,
supprimer la toolbar du navigateur [ par kitiop ]
Comment le faire sans passer par window.open ?Je veux ouvrir une fenêtre suite à validation de formulaire de transfert de fichier et indiquer que le t
site aves frames [ par Robens ]
Bonjour,J'ai un site avec des frames, chaque page du site contient un javascript pour détecter si la page est bien chargé dans une frame :&l
nombre d'image pour diaporama [ par bosto ]
Bonjour,Je suis super débutant et surtout graphiste pas technicien. Ma question est peut etre tres simple mais je ne trouve pas de reponse sur le
scroll bar avec roll over [ par Le Zbire ]
Dans les sections en rouge je voudrais faire un roll over j'ai essayer multiple moyens mais sa donne rienvous pourvez m'aider?La section bleu n'y touc
scroll bar graphique modifié..comment en avoir plusieurs? [ par Le Zbire ]
voici le codecode:<HTML><HEAD><TITLE>Smart Scroller</TITLE><META http-equiv=Content-Type content="text/html; charset=iso-88
fenêtre active (focus) ou pas ? [ par mageonyme ]
salut, comment savoir si la page est active ou non ? je m'explique : j'aimerai ouvrir une poup (ça c'est bon) avec le focus (self.focus();) mais
taille fenêtre à 100% pas compatible firefox.... [ par crashets4 ]
Bonjour,Je souhaite que ma fenêtre s'agrandisse à 100% de la page du visiteur. Le script fonctionne sous IE, sous Netscape, mais pas sous fi
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
UTILISER UN .JSUTILISER UN .JS par zaikoe
Cliquez pour lire la suite par zaikoe
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|