OVH Cloud OVH Cloud

Héritage à partir de String

2 réponses
Avatar
Glenn ROLLAND
Bonjour,

Je suis entrain de construire une modeste bibliothèque de classes JavaScript,
en évitant de surcharger les prototypes des classes de base ( afin de pouvoir
mélager des scripts de plusieurs sources sans trop me poser de questions).

Dans celle bibliothèque, j'aimerais avoir une classe MetaString héritant
de String et possédant des méthodes supplémentaires pour faire des
conversion urlEncode, base64, utf8, etc...

Voila ce que j'ai pour l'instant (et qui ne fonctionne pas...) :

MetaString = function ( value ) {
this.val = value || "" ;
return this;
}
MetaString.prototype = new String();

// Avec ou sans redéfinition de toString, j'obtiens un
// "String.prototype.toString called on incompatible Object" à la ligne du
// document.write. Mais avec, au moins, l'affichage de la chaine de caractère
// se fait correctement...
MetaString.prototype.toString = function() { return this.val; }

// mes méthodes ...
MetaString.prototypes.methodeX = function() { /* ... */ }
MetaString.prototypes.methodeY = function() { /* ... */ }

var s1 = new MetaString("demo");
document.write("<p>String = " + s1 + "</p>");

Comment faire pour que je puisse utiliser mes MetaString comme des String
"normaux", sans récolter au passage des messages d'erreurs ?

--
(o_ -+- Glenn ROLLAND -+- | ICQ : 35030444
//\ Another One | Jabber: glenux@jabber.dk
V_/_ Debian GNU/Linux user. | WWW : http://www.glenux.net

2 réponses

Avatar
O.L.
Bonjour,

Je suis entrain de construire une modeste bibliothèque de classes JavaScript,
en évitant de surcharger les prototypes des classes de base ( afin de pouvoir
mélager des scripts de plusieurs sources sans trop me poser de questions).

Dans celle bibliothèque, j'aimerais avoir une classe MetaString héritant
de String et possédant des méthodes supplémentaires pour faire des
conversion urlEncode, base64, utf8, etc...

Voila ce que j'ai pour l'instant (et qui ne fonctionne pas...) :

MetaString = function ( value ) {
this.val = value || "" ;
return this;
}
MetaString.prototype = new String();

// Avec ou sans redéfinition de toString, j'obtiens un
// "String.prototype.toString called on incompatible Object" à la ligne
du // document.write. Mais avec, au moins, l'affichage de la chaine de
caractère // se fait correctement...
MetaString.prototype.toString = function() { return this.val; }

// mes méthodes ...
MetaString.prototypes.methodeX = function() { /* ... */ }
MetaString.prototypes.methodeY = function() { /* ... */ }

var s1 = new MetaString("demo");
document.write("<p>String = " + s1 + "</p>");

Comment faire pour que je puisse utiliser mes MetaString comme des String
"normaux", sans récolter au passage des messages d'erreurs ?


Essaie en remplacant
MetaString.prototype = new String();

par :
MetaString.prototype = String;

--
Olivier Ligny
Créateur web free-lance / www.cyber-tamtam.net

Avatar
O.L.
Essaie en remplacant
MetaString.prototype = new String();

par :
MetaString.prototype = String;


*PS*

et remplace :
MetaString.prototypes.methodeX

par :
MetaString.prototype.methodeX (sans "s" à "prototype")

--
Olivier Ligny
Créateur web free-lance / www.cyber-tamtam.net