j'ai besoin d'implémenter une méthode pour String "belongsTo".
je l'avais fait d'une manière fonctionnelle ie. :
function belongsTo(string, array{...}
ça marchait comme je le souhaitait, me prend l'idée de passer en méthode
par prototype.
ça marche plus à cause de ma comparaison :
array[i] === aString
c'est le "===" qui va pas car quand j'ai :
var aString = "une string";
le typeof est string dans ce cas
et dans String.prototype.belongsTo=function(){...}
this est alors un objet, "normal" (d'où il suit qu'il faut changer le
=== en ==) me direz-vous, c'est quand même troublant...
par ailleurs j'ai besoin de la function "isArray" le typeof ne suffisant
pas car il retourne object.
sur quoi faire porter la différence Array, Object, #length ?
et c'est suffisant, je pense non ?
--
« L'éléphant ne peut pas courir et se gratter
les fesses en même temps. »
(Proverbe africain)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
unbewusst.sein
Une Bévue wrote:
par ailleurs j'ai besoin de la function "isArray" le typeof ne suffisant pas car il retourne object. sur quoi faire porter la différence Array, Object, #length ? et c'est suffisant, je pense non ?
ben non car une String a une méthode length, par contre, une Array n'a pas de méthode #charAt, donc j'ai fait : Object.prototype.isArray=function(){ return (typeof this.length === 'undefined')? false : ((typeof this.charAt === 'function')? false : true); } Object.prototype.isString=function(){ return (typeof this.length === 'undefined')? false : ((typeof this.charAt === 'function')? true : false ); }
ça pourrait se simplifier dans le cas de #isString...
-- « L'amour, c'est quand on rencontre quelqu'un qui vous donne de vos nouvelles. » (André Breton)
Une Bévue <unbewusst.sein@fai.invalid> wrote:
par ailleurs j'ai besoin de la function "isArray" le typeof ne suffisant
pas car il retourne object.
sur quoi faire porter la différence Array, Object, #length ?
et c'est suffisant, je pense non ?
ben non car une String a une méthode length, par contre, une Array n'a
pas de méthode #charAt, donc j'ai fait :
Object.prototype.isArray=function(){
return (typeof this.length === 'undefined')? false : ((typeof
this.charAt === 'function')? false : true);
}
Object.prototype.isString=function(){
return (typeof this.length === 'undefined')? false : ((typeof
this.charAt === 'function')? true : false );
}
ça pourrait se simplifier dans le cas de #isString...
--
« L'amour, c'est quand on rencontre quelqu'un
qui vous donne de vos nouvelles. »
(André Breton)
par ailleurs j'ai besoin de la function "isArray" le typeof ne suffisant pas car il retourne object. sur quoi faire porter la différence Array, Object, #length ? et c'est suffisant, je pense non ?
ben non car une String a une méthode length, par contre, une Array n'a pas de méthode #charAt, donc j'ai fait : Object.prototype.isArray=function(){ return (typeof this.length === 'undefined')? false : ((typeof this.charAt === 'function')? false : true); } Object.prototype.isString=function(){ return (typeof this.length === 'undefined')? false : ((typeof this.charAt === 'function')? true : false ); }
ça pourrait se simplifier dans le cas de #isString...
-- « L'amour, c'est quand on rencontre quelqu'un qui vous donne de vos nouvelles. » (André Breton)
Pascal Poncet
Le 11/10/2011 06:36, Une Bévue a écrit :
j'ai besoin d'implémenter une méthode pour String "belongsTo".
String belongs to... what, exactly?
Pour les non anglophones du groupe : "La chaîne appartient à... quoi, au juste ?"
-- Cordialement, Pascal
Le 11/10/2011 06:36, Une Bévue a écrit :
j'ai besoin d'implémenter une méthode pour String "belongsTo".
String belongs to... what, exactly?
Pour les non anglophones du groupe :
"La chaîne appartient à... quoi, au juste ?"
Reste à rajouter cette méthode, si elle n'est pas implémentée. Voir : [https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf]
-- Cordialement, Pascal
Le 11/10/2011 16:12, Une Bévue a écrit :
à une array, est contenue dans ...
par ex :
'un'.belongsTo(['zero', 'un', 'deux',...]);
va donner true.
C'est bien ce dont je me doutais.
Dans ce cas, c'est plutôt l'inverse qui se pratique, soit vérifier que
le tableau contient bien l'élément passé en argument, voire donner sa
position.
Reste à rajouter cette méthode, si elle n'est pas implémentée.
Voir :
[https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf]
Reste à rajouter cette méthode, si elle n'est pas implémentée. Voir : [https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/indexOf]
-- Cordialement, Pascal
unbewusst.sein
Pascal Poncet wrote:
C'est bien ce dont je me doutais.
Dans ce cas, c'est plutôt l'inverse qui se pratique, soit vérifier que le tableau contient bien l'élément passé en argument, voire donner sa position.
je l'ai aussi, Array.prototype.include=... je ne donnais ça qu'en exemple, le problème, amha, ne vient pas de la fonction elle-même mais de [Object|Array|String].prototype.... -- « L'amour, c'est quand on rencontre quelqu'un qui vous donne de vos nouvelles. » (André Breton)
Dans ce cas, c'est plutôt l'inverse qui se pratique, soit vérifier que
le tableau contient bien l'élément passé en argument, voire donner sa
position.
je l'ai aussi, Array.prototype.include=...
je ne donnais ça qu'en exemple, le problème, amha, ne vient pas de la
fonction elle-même mais de
[Object|Array|String].prototype....
--
« L'amour, c'est quand on rencontre quelqu'un
qui vous donne de vos nouvelles. »
(André Breton)
Dans ce cas, c'est plutôt l'inverse qui se pratique, soit vérifier que le tableau contient bien l'élément passé en argument, voire donner sa position.
je l'ai aussi, Array.prototype.include=... je ne donnais ça qu'en exemple, le problème, amha, ne vient pas de la fonction elle-même mais de [Object|Array|String].prototype.... -- « L'amour, c'est quand on rencontre quelqu'un qui vous donne de vos nouvelles. » (André Breton)
Il sera bon de rappeler que JavaScript est un langage dynamiquement typé, d'où la difficulté de s'appuyer sur le test d'un type de donnée.
Je pense donc que c'est la même problématique que pour les tests relatifs aux différentes implémentations, on ne teste pas le navigateur mais plutôt la caractéristique dont on a besoin, selon le contexte d'exécution.
Par exemple, si j'ai une fonction qui doit recevoir un tableau en argument, puis produire une concaténation de ses éléments, je vais vérifier que la méthode "join()" est applicable, et non pas que la valeur passée est bien un tableau.
<script> function csv(list) { if (list.join) return list.join(","); else ...// traitement de ce cas } </script>
Une autre solution consiste à passer par la gestion des exceptions :
<script> function csv(list) { try { return list.join(","); } catch (error) { ...// traitement de ce cas } } </script>
Mais si le test du type est vraiment nécessaire, voici une piste pour isArray : [https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/isArray#Compatibility]
Il sera bon de rappeler que JavaScript est un langage dynamiquement
typé, d'où la difficulté de s'appuyer sur le test d'un type de donnée.
Je pense donc que c'est la même problématique que pour les tests
relatifs aux différentes implémentations, on ne teste pas le navigateur
mais plutôt la caractéristique dont on a besoin, selon le contexte
d'exécution.
Par exemple, si j'ai une fonction qui doit recevoir un tableau en
argument, puis produire une concaténation de ses éléments, je vais
vérifier que la méthode "join()" est applicable, et non pas que la
valeur passée est bien un tableau.
<script>
function csv(list) {
if (list.join) return list.join(",");
else ...// traitement de ce cas
}
</script>
Une autre solution consiste à passer par la gestion des exceptions :
<script>
function csv(list) {
try {
return list.join(",");
} catch (error) {
...// traitement de ce cas
}
}
</script>
Mais si le test du type est vraiment nécessaire, voici une piste pour
isArray :
[https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/isArray#Compatibility]
Il sera bon de rappeler que JavaScript est un langage dynamiquement typé, d'où la difficulté de s'appuyer sur le test d'un type de donnée.
Je pense donc que c'est la même problématique que pour les tests relatifs aux différentes implémentations, on ne teste pas le navigateur mais plutôt la caractéristique dont on a besoin, selon le contexte d'exécution.
Par exemple, si j'ai une fonction qui doit recevoir un tableau en argument, puis produire une concaténation de ses éléments, je vais vérifier que la méthode "join()" est applicable, et non pas que la valeur passée est bien un tableau.
<script> function csv(list) { if (list.join) return list.join(","); else ...// traitement de ce cas } </script>
Une autre solution consiste à passer par la gestion des exceptions :
<script> function csv(list) { try { return list.join(","); } catch (error) { ...// traitement de ce cas } } </script>
Mais si le test du type est vraiment nécessaire, voici une piste pour isArray : [https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/isArray#Compatibility]
-- Cordialement, Pascal
Pascal Poncet
Le 11/10/2011 16:46, Une Bévue a écrit :
je l'ai aussi, Array.prototype.include=...
Tiens tiens, y a du "ruby" dans l'air, non ?
je ne donnais ça qu'en exemple, le problème, amha, ne vient pas de la fonction elle-même mais de [Object|Array|String].prototype....
Je ne vois pas pourquoi ! Un type String n'a pas besoin d'être testé, puisqu'on peut transtyper à tout moment en utilisant le constructeur comme une fonction.
var tab = [1,2,3]; alert(String(tab)); // fait appel à la méthode toString de Array
-- Cordialement, Pascal
Le 11/10/2011 16:46, Une Bévue a écrit :
je l'ai aussi, Array.prototype.include=...
Tiens tiens, y a du "ruby" dans l'air, non ?
je ne donnais ça qu'en exemple, le problème, amha, ne vient pas de la
fonction elle-même mais de
[Object|Array|String].prototype....
Je ne vois pas pourquoi !
Un type String n'a pas besoin d'être testé, puisqu'on peut transtyper à
tout moment en utilisant le constructeur comme une fonction.
var tab = [1,2,3];
alert(String(tab)); // fait appel à la méthode toString de Array
je ne donnais ça qu'en exemple, le problème, amha, ne vient pas de la fonction elle-même mais de [Object|Array|String].prototype....
Je ne vois pas pourquoi ! Un type String n'a pas besoin d'être testé, puisqu'on peut transtyper à tout moment en utilisant le constructeur comme une fonction.
var tab = [1,2,3]; alert(String(tab)); // fait appel à la méthode toString de Array
-- Cordialement, Pascal
unbewusst.sein
Pascal Poncet wrote:
Il sera bon de rappeler que JavaScript est un langage dynamiquement typé, d'où la difficulté de s'appuyer sur le test d'un type de donnée.
Ouais, il n'empèche qu'une fonction est généralement prévue pour un type de donnée.
Par exemple, si j'ai une fonction qui doit recevoir un tableau en argument, puis produire une concaténation de ses éléments, je vais vérifier que la méthode "join()" est applicable, et non pas que la valeur passée est bien un tableau.
c'est à peu près ce que je fais excepté que, plutôt que répéter à chaque usage le test "if (list.join)", je souhaite créer une méthode "isArray" par :
Object.prototype.isArray=function(){ le test qui va bien);
Et, c'est ce qui ne marche pas avec mon constructeur MVC...
-- « L'amour, c'est quand on rencontre quelqu'un qui vous donne de vos nouvelles. » (André Breton)
Il sera bon de rappeler que JavaScript est un langage dynamiquement
typé, d'où la difficulté de s'appuyer sur le test d'un type de donnée.
Ouais, il n'empèche qu'une fonction est généralement prévue pour un type
de donnée.
Par exemple, si j'ai une fonction qui doit recevoir un tableau en
argument, puis produire une concaténation de ses éléments, je vais
vérifier que la méthode "join()" est applicable, et non pas que la
valeur passée est bien un tableau.
c'est à peu près ce que je fais excepté que, plutôt que répéter à chaque
usage le test "if (list.join)", je souhaite créer une méthode "isArray"
par :
Object.prototype.isArray=function(){ le test qui va bien);
Et, c'est ce qui ne marche pas avec mon constructeur MVC...
--
« L'amour, c'est quand on rencontre quelqu'un
qui vous donne de vos nouvelles. »
(André Breton)
Il sera bon de rappeler que JavaScript est un langage dynamiquement typé, d'où la difficulté de s'appuyer sur le test d'un type de donnée.
Ouais, il n'empèche qu'une fonction est généralement prévue pour un type de donnée.
Par exemple, si j'ai une fonction qui doit recevoir un tableau en argument, puis produire une concaténation de ses éléments, je vais vérifier que la méthode "join()" est applicable, et non pas que la valeur passée est bien un tableau.
c'est à peu près ce que je fais excepté que, plutôt que répéter à chaque usage le test "if (list.join)", je souhaite créer une méthode "isArray" par :
Object.prototype.isArray=function(){ le test qui va bien);
Et, c'est ce qui ne marche pas avec mon constructeur MVC...
-- « L'amour, c'est quand on rencontre quelqu'un qui vous donne de vos nouvelles. » (André Breton)
unbewusst.sein
Pascal Poncet wrote:
Je ne vois pas pourquoi ! Un type String n'a pas besoin d'être testé, puisqu'on peut transtyper à tout moment en utilisant le constructeur comme une fonction.
brn justement je souhaite écraser le toString() pour chaque type, en autre choses.
var tab = [1,2,3]; alert(String(tab)); // fait appel à la méthode toString de Array
ce n'est pas le problème pour moi.
Mon problème est que, dès que je mets le moindre "prototype", comme ça :
Je ne vois pas pourquoi !
Un type String n'a pas besoin d'être testé, puisqu'on peut transtyper à
tout moment en utilisant le constructeur comme une fonction.
brn justement je souhaite écraser le toString() pour chaque type, en
autre choses.
var tab = [1,2,3];
alert(String(tab)); // fait appel à la méthode toString de Array
ce n'est pas le problème pour moi.
Mon problème est que, dès que je mets le moindre "prototype", comme ça :
Je ne vois pas pourquoi ! Un type String n'a pas besoin d'être testé, puisqu'on peut transtyper à tout moment en utilisant le constructeur comme une fonction.
brn justement je souhaite écraser le toString() pour chaque type, en autre choses.
var tab = [1,2,3]; alert(String(tab)); // fait appel à la méthode toString de Array
ce n'est pas le problème pour moi.
Mon problème est que, dès que je mets le moindre "prototype", comme ça :