IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Méthode de substitution en cas de non-existence (substr)


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2022
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2022
    Messages : 19
    Par défaut Méthode de substitution en cas de non-existence (substr)
    Bonjour à tous,

    Je cherche à sécuriser une vieille portion de code javascript dans laquelle est répétée de nombreuses fois la méthode substr(), dépréciée et qui pourrait donc (?) éventuellement disparaitre un jour de certains navigateurs (ce que je trouve absurde dans l'idée mais passons...).

    L'idée est donc de rajouter une condition recréant la méthode si elle n'existe pas, dans le genre de celle-ci (qui censée faire le job juste pour les indices négatifs) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    if (!typeof(substr) == 'function')   // mais est ce une fonction ?!
    {
     String.prototype.substr = (function (substr) {
        return function (début, longueur) {
          // Appel de la méthode originale
          return substr.call(
            this,
            // Si on a un début négatif, calculer combien il vaut à partir du début de la chaîne
            // Ajuster le paramètre pour une valeur négative
            début < 0 ? this.length + début : début,
            longueur,
          );
        };
      })(String.prototype.substr);
    }
    Quelqu'un saurait comment faire la fonction complète proprement ? (parce que je n'y connais pour ainsi dire rien dans ces subtilités) ?

    Le bout de code vient de là : https://developer.mozilla.org.cach3..../String/substr


    Un grand merci d'avance... je suis très étonné de ne pas avoir trouvé de réponse à cette question sur le net. Cela dit la question est peut être "erronée"...

  2. #2
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    Salut, tout simplement avec slice()...
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function substrperso(str, start, length) {
      return str.slice(start, start + length);
    }
     
    const mystr="javascript, c'est fantastique";
    alert( substrperso( mystr,18,11) );

  3. #3
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2022
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2022
    Messages : 19
    Par défaut
    Bonjour, le problème, c'est que je cherche à recréer une méthode qui prendrait vraiment le relai pour imiter substr si celle ci n'existait plus... donc avec la même syntaxe, ex : test.substr(2,2)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if (!typeof(substr) == 'function')   // mais substr est une méthode, pas une fonction
    {
      function substr(str, start, length) {
        return str.slice(start, start + length);
      }
    }
     
    // Ca ne conviendrait a priori pas pour faire fonctionner :
     
    var test = 'Hello world';
     
    var res1 = test.substr(2,2);
    var res2 = test.substr(-3);
    Merci encore...

  4. #4
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    Ok et ça :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     String.prototype.substrperso = function(start, length){
          return this.slice(start, start + length);
    };
     
    const mystr="javascript, c'est fantastique";
    alert( mystr.substrperso(18,11) );

  5. #5
    Membre chevronné
    Homme Profil pro
    Urbaniste
    Inscrit en
    Août 2023
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Urbaniste

    Informations forums :
    Inscription : Août 2023
    Messages : 387

  6. #6
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    Pour coller plus précisément à substr() :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    String.prototype.substrperso = function(start, length = this.length - start){
          if (start < 0) start = Math.max(this.length + start, 0);
          return this.slice(start, start + length);
    };
     
    const mystr="javascript, c'est fantastique";
    alert( mystr.substrperso(2,2) );
    alert(mystr.substr(2,2));
    alert( mystr.substrperso(-3) );
    alert(mystr.substr(-3));

  7. #7
    Membre averti
    Homme Profil pro
    Webmaster
    Inscrit en
    Février 2022
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Février 2022
    Messages : 19
    Par défaut
    Bonsoir,
    Citation Envoyé par unanonyme Voir le message
    ...
    Je viens de voir les 3 pages... le code a l'air franchement compliqué (mais sans doute tout à fait pro)... l'un fait un include, c'est un peu dommage... bref, cela doit-il être si complexe et difficile à comprendre pour une si petite méthode ?

Discussions similaires

  1. Stopper un Shell en cas de non réponse
    Par stigma dans le forum Access
    Réponses: 2
    Dernier message: 05/10/2006, 10h03
  2. Réponses: 1
    Dernier message: 10/02/2006, 19h07
  3. Réponses: 6
    Dernier message: 10/02/2006, 13h46
  4. Réponses: 2
    Dernier message: 05/01/2006, 14h17
  5. Réponses: 9
    Dernier message: 17/03/2005, 09h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo