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 :

Equivalent ES5 de Object.assign


Sujet :

JavaScript

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre extr�mement actif Avatar de mapmip
    Profil pro
    ulla
    Inscrit en
    Juillet 2006
    Messages
    1 326
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : ulla

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 326
    Par d�faut Equivalent ES5 de Object.assign
    salut,

    connaissez vous un bon �quivalent en ES5 de la fonction ES6 Object.assign ?

    Merci d'avance

  2. #2
    Expert confirm�
    Avatar de Marco46
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2005
    Messages
    4 419
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 4 419
    Par d�faut
    Ben � part un polyfill (par ex celui de MDN) je vois pas trop ...

  3. #3
    R�dacteur

    Avatar de danielhagnoul
    Homme Profil pro
    �tudiant perp�tuel
    Inscrit en
    F�vrier 2009
    Messages
    6 389
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant perp�tuel
    Secteur : Enseignement

    Informations forums :
    Inscription : F�vrier 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par d�faut


    Un polyfill comme dit par @Marco46 ou extend() de jQuery : http://api.jquery.com/jQuery.extend/

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues � un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

  4. #4
    Membre extr�mement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par d�faut
    Le pb de ces 2 fonctions c'est qu'elles peuvent ajouter des propri�t�s suppl�mentaires � l'objet initial.
    En soit cela peut sembler bien, mais en g�n�ral ces fonctions sont faites pour modifier des param�trages par d�faut, et les �l�ments suppl�mentaires arrivent inutilement.

    L�autre probl�me de ces fonctions c'est qu'elles ne font pas de contr�le de typage et que donc on peu changer le type d'un des param�tres ce qui fera planter par la suite...
    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
    16
    17
    18
    19
    20
    21
    22
    23
    const obj_Params = {
      a: 1,   // valeurs par défaut...
      b: 2,
      c: 3
    };
     
    const obj_ChoixParams = {
      a: 7,
      c: 'changement de type',
      z: 'juste inutile'
    };
     
     
    Object.assign(obj_Params, obj_ChoixParams)
     
    console.log ( obj_Params );
     
    /* retour = 
    		a: 7
    		b: 2
    		c: "changement de type"
    		z: "juste inutile"
    */
    du coup je me suis fait un wrapper perso pour faire le job.
    Si ce post int�resse vraiment qq'1 je mettrait le code ici..

  5. #5
    Membre extr�mement actif Avatar de mapmip
    Profil pro
    ulla
    Inscrit en
    Juillet 2006
    Messages
    1 326
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activit� : ulla

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 326
    Par d�faut
    ca m'int�resse !

  6. #6
    Membre extr�mement actif Avatar de psychadelic
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    2 532
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 2 532
    Par d�faut
    Je l'ai appel� jsoUpdate.
    J'ai mis en commentaire un exemple d'utilisation.


    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    if (!Object.prototype.jsoUpdate) {
        Object.defineProperty(Object.prototype, 'jsoUpdate', {
            value: function(value) {
                if (this == null) { 
                    throw new TypeError('this is null or not defined');
                }
                var to = Object(this);
                if (value != null) {                   // Skip over if undefined or null
                    for (var xKey in value) {
                        // Avoid bugs when hasOwnProperty is shadowed
                        if (Object.prototype.hasOwnProperty.call(value, xKey)) {
                            if (to.hasOwnProperty(xKey)) {
                                if (typeof(to[xKey]) === typeof(value[xKey]) ) {
                                    to[xKey] = value[xKey];
                                }
                            }
                        }
                    }
                } 
                return to;
            }
        });
    }
    /* exemples jsoUpdate:
     
        var default_vals   = { One_n: 111,           two_s: 'UNunUN', tree: '1-1-1', D: { d_n: 456, d_t: 'texte'} };
        var change_options = { One_n: 'Deux sur 111', two_s: 2222,    tree:'2-2-2', noNeed: 'noNeed', D: { d_n: 789, bof:'eeeeeeeee' }  };
     
        console.log(default_vals);
     
        default_vals.jsoUpdate(change_options);
     
        console.log(default_vals);
    */
    attention, il fonctionne diff�remment de la propri�t� assign ou du truc de jQuery
    , ni ne fait ses contr�les pour les sous �l�ments des objets (dans l'exemple l'�l�ment D ) * [c'est fait expr�s, j'y met des expressions css pouvant varier ]

    je me suis bas� sur le polyfill de Mozilla, mais en simplifiant le code pour mes besoins.

  7. #7
    Mod�rateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 211
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 211
    Par d�faut
    Bonjour,
    attention, il fonctionne diff�remment de la propri�t� assign ou du truc de jQuery
    c'est le moindre que l'on puisse dire donc il ne respecte pas la sp�cification de ES6 assign.

    Si l'on fait un rapide test on obtient sur base des objets suivants :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var src = {
      "key-a": "srce-a",
      "key-b": "srce-b",
      "key-c": "srce-c",
      "key-d": "srce-d" 
    };
    var dest = {
      "key-a": "dest-a",
      "key-b": "dest-b",
      "key-c": "dest-c",
      "key-e": "dest-e"
    };
    � ES6 assign :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    Object.assign(dest, src);
    console.log("assign : ",JSON.stringify(dest,null, 2));
    donne
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    assign :  {
      "key-a": "srce-a",
      "key-b": "srce-b",
      "key-c": "srce-c",
      "key-e": "dest-e",
      "key-d": "srce-d"
    }
    � polyFill MDN :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    Object.polyFill (dest, src);
    console.log("polyFill : ",JSON.stringify(dest,null, 2));
    donne
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    polyFill :  {
      "key-a": "srce-a",
      "key-b": "srce-b",
      "key-c": "srce-c",
      "key-e": "dest-e",
      "key-d": "srce-d"
    }
    � forEach : qui peut convenir dans bien des cas
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    Object.keys(src).forEach(function(ind) { dest[ind] = src[ind]; });
    console.log('forEach : ',JSON.stringify(dest,null, 2));
    donne
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    forEach :  {
      "key-a": "srce-a",
      "key-b": "srce-b",
      "key-c": "srce-c",
      "key-e": "dest-e",
      "key-d": "srce-d"
    }
    � jsoUpdate :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    dest.jsoUpdate(src);
    console.log('jsoUpdate : ',JSON.stringify(dest,null, 2));
    donne
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    jsoUpdate :  {
      "key-a": "srce-a",
      "key-b": "srce-b",
      "key-c": "srce-c",
      "key-e": "dest-e"
    }
    on est loin des autres ...

    pas test� jQuery

  8. #8
    R�dacteur

    Avatar de danielhagnoul
    Homme Profil pro
    �tudiant perp�tuel
    Inscrit en
    F�vrier 2009
    Messages
    6 389
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 75
    Localisation : Belgique

    Informations professionnelles :
    Activit� : �tudiant perp�tuel
    Secteur : Enseignement

    Informations forums :
    Inscription : F�vrier 2009
    Messages : 6 389
    Billets dans le blog
    125
    Par d�faut
    ES2015 (ex ES6), ES2016 et ES2017 sont utilisables sur tous les navigateurs dignes de ce nom (Chrome, Firefox et Edge) lorsqu'ils sont � jour !

    ES2018 arrive bient�t (http://2ality.com/2017/02/ecmascript-2018.html)

    ES2015 free book online : http://exploringjs.com/es6/index.html

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues � un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

Discussions similaires

  1. [PHP 5.2] Attempt to assign property of non-object
    Par JCEYMER dans le forum Langage
    R�ponses: 2
    Dernier message: 13/07/2009, 13h46
  2. erreur :Cell contents assignment to a non-cell array object.
    Par lince102 dans le forum Interfaces Graphiques
    R�ponses: 5
    Dernier message: 17/12/2007, 15h09
  3. [BO INFO] Equivalent Business Objects
    Par SebastienM dans le forum D�buter
    R�ponses: 8
    Dernier message: 23/11/2007, 15h08
  4. [Object] Probl�mes avec Assigned
    Par Clorish dans le forum Langage
    R�ponses: 9
    Dernier message: 30/06/2005, 13h22
  5. R�ponses: 4
    Dernier message: 04/03/2005, 17h48

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