Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Heritage de l'objet Error

10 réponses
Avatar
Vincent Nabet
Bonjour,

J'essaye de créer un objet qui hérite de l'objet Error mais j'ai une
erreur "Argument ou appel de procédure incorrect" sur la ligne
this.parent(number, description);

voici un exemple de code

function YError(number, description) {
this.parent = Error;
this.parent(number, description);
}
YError.prototype = new Error();


try {
throw new YError(100, 'toto');
} catch(error) {
alert(error.description);
}


Merci d'avance

Vincent

10 réponses

Avatar
O.L.
Bonjour,

J'essaye de créer un objet qui hérite de l'objet Error mais j'ai une erreur
"Argument ou appel de procédure incorrect" sur la ligne this.parent(number,
description);
[...]

Merci d'avance

Vincent


La méthode this.parent() n'existe pas, ce qui provoque l'affichage de
cette erreur en réponse à l'impossibilité d'instancier correctement ton
objet YError.

Voici un code rectifié qui marche chez moi :

function YError(number, description) {
this.parent = Error;
this.number = number;
this.description = description;
}
YError.prototype = new Error();


try{
throw new YError(100, 'toto');
} catch(e) {
alert(e.description);
}

@+

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

Avatar
Bertrand B
Bonjour,

J'essaye de créer un objet qui hérite de l'objet Error mais j'ai u ne
erreur "Argument ou appel de procédure incorrect" sur la ligne
this.parent(number, description);
[...]

Merci d'avance

Vincent


La méthode this.parent() n'existe pas, ce qui provoque l'affichage de
cette erreur en réponse à l'impossibilité d'instancier correcteme nt ton
objet YError.

Voici un code rectifié qui marche chez moi :

function YError(number, description) {
this.parent = Error;
this.number = number;
this.description = description;
}
YError.prototype = new Error();


try{
throw new YError(100, 'toto');
} catch(e) {
alert(e.description);
}

@+

Mais que va alors contenir this.parent ?



Avatar
O.L.
Bonjour,

J'essaye de créer un objet qui hérite de l'objet Error mais j'ai une
erreur "Argument ou appel de procédure incorrect" sur la ligne
this.parent(number, description);
[...]

Merci d'avance

Vincent


La méthode this.parent() n'existe pas, ce qui provoque l'affichage de cette
erreur en réponse à l'impossibilité d'instancier correctement ton objet
YError.

Voici un code rectifié qui marche chez moi :

function YError(number, description) {
this.parent = Error;
this.number = number;
this.description = description;
}
YError.prototype = new Error();


try{
throw new YError(100, 'toto');
} catch(e) {
alert(e.description);
}

@+

Mais que va alors contenir this.parent ?



Comme vu dans le code :

this.parent = Error;



Non ?

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



Avatar
Bertrand B
Bonjour,

J'essaye de créer un objet qui hérite de l'objet Error mais j'ai une
erreur "Argument ou appel de procédure incorrect" sur la ligne
this.parent(number, description);
[...]

Merci d'avance

Vincent


La méthode this.parent() n'existe pas, ce qui provoque l'affichage de
cette erreur en réponse à l'impossibilité d'instancier correcte ment
ton objet YError.

Voici un code rectifié qui marche chez moi :

function YError(number, description) {
this.parent = Error;
this.number = number;
this.description = description;
}
YError.prototype = new Error();


try{
throw new YError(100, 'toto');
} catch(e) {
alert(e.description);
}

@+

Mais que va alors contenir this.parent ?



Comme vu dans le code :

this.parent = Error;



Non ?



Je ne dois pas comprendre le mécanisme :
pourquoi this.parent=Error ?
et pourquoi plus loin
YError.prototype = new Error(); un protoptype qui est un objet ?




Avatar
O.L.
Bonjour,

J'essaye de créer un objet qui hérite de l'objet Error mais j'ai une
erreur "Argument ou appel de procédure incorrect" sur la ligne
this.parent(number, description);
[...]

Merci d'avance

Vincent


La méthode this.parent() n'existe pas, ce qui provoque l'affichage de
cette erreur en réponse à l'impossibilité d'instancier correctement ton
objet YError.

Voici un code rectifié qui marche chez moi :

function YError(number, description) {
this.parent = Error;
this.number = number;
this.description = description;
}
YError.prototype = new Error();


try{
throw new YError(100, 'toto');
} catch(e) {
alert(e.description);
}

@+

Mais que va alors contenir this.parent ?



Comme vu dans le code :

this.parent = Error;



Non ?



Je ne dois pas comprendre le mécanisme :
pourquoi this.parent=Error ?
et pourquoi plus loin
YError.prototype = new Error(); un protoptype qui est un objet ?


Ben ça j'en sais rien, c'était dans le code de Vincent Nabet, faut lui
demander ...
Moi j'ai juste modifié, sans repartir de 0. Surtout que je savais pas
bien c'était quoi son objectif ...

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





Avatar
Bertrand B
Bonjour,

J'essaye de créer un objet qui hérite de l'objet Error mais j' ai
une erreur "Argument ou appel de procédure incorrect" sur la lig ne
this.parent(number, description);
[...]

Merci d'avance

Vincent


La méthode this.parent() n'existe pas, ce qui provoque l'affichag e
de cette erreur en réponse à l'impossibilité d'instancier
correctement ton objet YError.

Voici un code rectifié qui marche chez moi :

function YError(number, description) {
this.parent = Error;
this.number = number;
this.description = description;
}
YError.prototype = new Error();


try{
throw new YError(100, 'toto');
} catch(e) {
alert(e.description);
}

@+

Mais que va alors contenir this.parent ?



Comme vu dans le code :

this.parent = Error;



Non ?



Je ne dois pas comprendre le mécanisme :
pourquoi this.parent=Error ?
et pourquoi plus loin
YError.prototype = new Error(); un protoptype qui est un objet ?


Ben ça j'en sais rien, c'était dans le code de Vincent Nabet, faut lui
demander ...
Moi j'ai juste modifié, sans repartir de 0. Surtout que je savais pas
bien c'était quoi son objectif ...




Je cite Wikipedia :

Prototypes

Un prototype est un objet javascript qui est utilisé lors d'un l'éc hec de résolution d'un nom sur son objet parent. Ce mécanisme est un type d'héritage : l'héritage par prototype.

function MonPrototype() {

this.a = 1;
this.b = function() {

return 'prototype';
}
this.e = 3;
}

function MaClasse() {

this.c = 2;
this.d = function() {

return 'classe';
}
this.e = 4;
}

MaClasse.prototype = new MonPrototype();


monObjet = new MaClasse();

monObjet.a; // 1
monObjet.b(); // 'prototype'
monObjet.c; // 2
monObjet.d(); // 'classe'
monObjet.e; // 4


L'héritage n'a rien à faire avec this.parent même si des documents
présente l'héritage de cette manière, je ne comprends pas pourquoi
stocker dans un objet un lien vers le constructeur de la classe mère de
la sienne.






Avatar
O.L.
L'héritage n'a rien à faire avec this.parent même si des documents présente
l'héritage de cette manière, je ne comprends pas pourquoi stocker dans un
objet un lien vers le constructeur de la classe mère de la sienne.


Moi non plus.

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

Avatar
Vincent Nabet



Bonjour,

J'essaye de créer un objet qui hérite de l'objet Error mais j'ai
une erreur "Argument ou appel de procédure incorrect" sur la
ligne this.parent(number, description);


[...]

Merci d'avance

Vincent



La méthode this.parent() n'existe pas, ce qui provoque l'affichage
de cette erreur en réponse à l'impossibilité d'instancier
correctement ton objet YError.

Voici un code rectifié qui marche chez moi :

function YError(number, description) {
this.parent = Error;
this.number = number;
this.description = description;
}
YError.prototype = new Error();


try{
throw new YError(100, 'toto');
} catch(e) {
alert(e.description);
}

@+

Mais que va alors contenir this.parent ?




Comme vu dans le code :

this.parent = Error;




Non ?



Je ne dois pas comprendre le mécanisme :
pourquoi this.parent=Error ?
et pourquoi plus loin
YError.prototype = new Error(); un protoptype qui est un objet ?



Ben ça j'en sais rien, c'était dans le code de Vincent Nabet, faut lui
demander ...
Moi j'ai juste modifié, sans repartir de 0. Surtout que je savais pas
bien c'était quoi son objectif ...




Je cite Wikipedia :

Prototypes

Un prototype est un objet javascript qui est utilisé lors d'un l'échec
de résolution d'un nom sur son objet parent. Ce mécanisme est un type
d'héritage : l'héritage par prototype.

function MonPrototype() {
this.a = 1;
this.b = function() {
return 'prototype';
}
this.e = 3;
}

function MaClasse() {

this.c = 2;
this.d = function() {
return 'classe';
} this.e = 4;
}

MaClasse.prototype = new MonPrototype();


monObjet = new MaClasse();

monObjet.a; // 1
monObjet.b(); // 'prototype'
monObjet.c; // 2
monObjet.d(); // 'classe'
monObjet.e; // 4



L'héritage n'a rien à faire avec this.parent même si des documents
présente l'héritage de cette manière, je ne comprends pas pourquoi
stocker dans un objet un lien vers le constructeur de la classe mère de
la sienne.


Effectivement, si l'on omet la ligne 'this.parent = Error' cela
fonctionne pareil. D'un autre côté, il y a effectivement pas mal de
document qui le propose.
Le seul avantage que j'y ai trouvé c'est de pouvoir surcharger une
methode de la classe parente
Exemple:

//////////////////////////////////////////////
function MonPrototype() {
this.a = 10;
}
MonPrototype.prototype.b = function() {
this.a++;
}


MaClasse.prototype = new MonPrototype();
function MaClasse() {
this.parent = MonPrototype;
}
MaClasse.prototype.b = function() {
this.parent.prototype.b.call(this);
this.a++;
}


monObjet = new MaClasse();

document.write(monObjet.a+ '<br/>'); //renvoi 10
monObjet.b();
document.write(monObjet.a+ '<br/>'); //renvoi 12 (+1 dans
MonPrototype.b() et +1 dans MaClasse.b())
//////////////////////////////////////////////

La ligne à retenir étant bien sûr
this.parent.prototype.b.call(this); où l'on apelle la fonction de la
classe parente dans le contexte de notre nouvelle classe

Maintenant j'avoue que
MonPrototype.prototype.b.call(this);
fonctionne très bien et, encore une fois, rend la ligne
this.parent=MonPrototype; obsolète.

Alors, à moins que quelqu'un ai une autre idée sur l'utilité du
"this.parent = MonPrototype;" , je pense qu'il s'agit avant tout d'un
moyen de rendre l'écriture du code plus logique et plus objet. Comme
dans cet exemple de surcharge où il est plus propre de surcharger en
appelant this.parent, plutôt que le nom de la classe parente.

En tout cas, merci pour votre aide !

Vincent







Avatar
Vincent Nabet



Bonjour,

J'essaye de créer un objet qui hérite de l'objet Error mais j'ai
une erreur "Argument ou appel de procédure incorrect" sur la
ligne this.parent(number, description);


[...]

Merci d'avance

Vincent



La méthode this.parent() n'existe pas, ce qui provoque l'affichage
de cette erreur en réponse à l'impossibilité d'instancier
correctement ton objet YError.

Voici un code rectifié qui marche chez moi :

function YError(number, description) {
this.parent = Error;
this.number = number;
this.description = description;
}
YError.prototype = new Error();


try{
throw new YError(100, 'toto');
} catch(e) {
alert(e.description);
}

@+

Mais que va alors contenir this.parent ?




Comme vu dans le code :

this.parent = Error;




Non ?



Je ne dois pas comprendre le mécanisme :
pourquoi this.parent=Error ?
et pourquoi plus loin
YError.prototype = new Error(); un protoptype qui est un objet ?



Ben ça j'en sais rien, c'était dans le code de Vincent Nabet, faut lui
demander ...
Moi j'ai juste modifié, sans repartir de 0. Surtout que je savais pas
bien c'était quoi son objectif ...




Je cite Wikipedia :

Prototypes

Un prototype est un objet javascript qui est utilisé lors d'un l'échec
de résolution d'un nom sur son objet parent. Ce mécanisme est un type
d'héritage : l'héritage par prototype.

function MonPrototype() {
this.a = 1;
this.b = function() {
return 'prototype';
}
this.e = 3;
}

function MaClasse() {

this.c = 2;
this.d = function() {
return 'classe';
} this.e = 4;
}

MaClasse.prototype = new MonPrototype();


monObjet = new MaClasse();

monObjet.a; // 1
monObjet.b(); // 'prototype'
monObjet.c; // 2
monObjet.d(); // 'classe'
monObjet.e; // 4



L'héritage n'a rien à faire avec this.parent même si des documents
présente l'héritage de cette manière, je ne comprends pas pourquoi
stocker dans un objet un lien vers le constructeur de la classe mère de
la sienne.


Effectivement, si l'on omet la ligne 'this.parent = Error' cela
fonctionne pareil. D'un autre côté, il y a effectivement pas mal de
document qui le propose.
Le seul avantage que j'y ai trouvé c'est de pouvoir surcharger une
methode de la classe parente
Exemple:

//////////////////////////////////////////////
function MonPrototype() {
this.a = 10;
}
MonPrototype.prototype.b = function() {
this.a++;
}


MaClasse.prototype = new MonPrototype();
function MaClasse() {
this.parent = MonPrototype;
}
MaClasse.prototype.b = function() {
this.parent.prototype.b.call(this);
this.a++;
}


monObjet = new MaClasse();

document.write(monObjet.a+ '<br/>'); //renvoi 10
monObjet.b();
document.write(monObjet.a+ '<br/>'); //renvoi 12 (+1 dans
MonPrototype.b() et +1 dans MaClasse.b())
//////////////////////////////////////////////

La ligne à retenir étant bien sûr
this.parent.prototype.b.call(this); où l'on apelle la fonction de la
classe parente dans le contexte de notre nouvelle classe

Maintenant j'avoue que
MonPrototype.prototype.b.call(this);
fonctionne très bien et, encore une fois, rend la ligne
this.parent=MonPrototype; obsolète.

Alors, à moins que quelqu'un ai une autre idée sur l'utilité du
"this.parent = MonPrototype;" , je pense qu'il s'agit avant tout d'un
moyen de rendre l'écriture du code plus logique et plus objet. Comme
dans cet exemple de surcharge où il est plus propre de surcharger en
appelant this.parent, plutôt que le nom de la classe parente.

En tout cas, merci pour votre aide !

Vincent







Avatar
Bertrand B

Alors, à moins que quelqu'un ai une autre idée sur l'utilité du
"this.parent = MonPrototype;" , je pense qu'il s'agit avant tout d'un
moyen de rendre l'écriture du code plus logique et plus objet. Comme
dans cet exemple de surcharge où il est plus propre de surcharger en
appelant this.parent, plutôt que le nom de la classe parente.



Plus souvent il s'agit de la transposition d'une écriture d'un langage
vers un autre.
La tendance étant d'essayer de transposer les schémas de ses langages
préférés vers les autres ... sans avoir totalement compris les
différences de philosophie.

Et en aucun cas l'écriture n'est plus objet ! elle doit juste faire
référence à un langage objet où a dérivation de classe l'exige (mais
lequel ?). Appliqué au cas du javascript c'est carrément choquant (vo ir
supra) et inutile comme tu l'as dit toi même.