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

jQuery Discussion :

Conflit jQuery et Object.prototype ?


Sujet :

jQuery

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 20
    Par défaut Conflit jQuery et Object.prototype ?
    Bonjour,

    Je recontre un problème avec jquery et la définition de méthodes à la classe Object.

    Voici ici un jsfiddle (Il vous faudra demander a firebug de continuer le script si comme moi il s'arrête sur chaque erreur)
    et le code :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <div id="block"></div>
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    #block {width:100px;height:100px;background:green;}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Number.prototype.round = function(n){ return parseFloat(this.toFixed(n)) }
    Object.prototype.isInt = function(){  return  this instanceof Number && /^\d+$/.test(this.toString()) }
     
    $(document).ready(function()
    {
    	// alert((3).isInt());
         $("div#block").css("background","red")
         $("div#block").slideUp();
     
    })
    Le problème est que les fonctions d'animations de jQuery (sliding et animate) ne fonctionne plus, j'ai cette erreur :
    TypeError: [].concat is not a function
    - Même sans faire appel à la méthode isInt, j'ai l'erreur
    - En commentant la ligne de la définition isInt , je n'ai plus d'erreur
    - Une définition de méthode à une classe hérité de Object ne donne pas d'erreur.

    D'ou pourrais venir ce problème ? Existe t-il une incompatibilité entre jquery et l'attribut prototype de Object, ou y a t-il quelque chose que je fait mal ou n'est pas compris ?

    Merci d'avance pour le coup de main !

  2. #2
    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 : 74
    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
    Bonsoir

    Règle de survie : ne jamais toucher au prototype de "Object".

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    <!DOCTYPE html>
    <html lang="fr" dir="ltr">
    <head>
    	<meta charset="utf-8">
    	<meta name="viewport" content="initial-scale=1.0">
    	<meta name="author" content="Daniel Hagnoul">
    	<title>Forum jQuery</title>
    	<script src="http://cdnjs.cloudflare.com/ajax/libs/headjs/0.99/head.min.js"></script>
    	<script>
    		"use strict";
     
    		head.js( 
    			"http://d3js.org/d3.v3.min.js",
    			"http://code.jquery.com/jquery-2.0.3.min.js",
    			"http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/i18n/jquery-ui-i18n.min.js",
    			"http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js",
    			"http://danielhagnoul.developpez.com/lib/dvjh/d3Base.js", function(){
     
    Number.prototype.round = function( n ){
    	return parseFloat( this.toFixed( n ) );
    };
     
    /*
     * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger
     */
    if (! Number.isInteger ){
      Number.isInteger = function isInteger( nVal ){
        return ( ( typeof nVal === "number" ) && 
        			isFinite( nVal ) && 
        			( nVal > -9007199254740992 ) && 
        			( nVal < 9007199254740992 ) && 
        			( Math.floor(nVal) === nVal ) );
      };
    }
     
    $( function(){
     
    	var n = 3.568971,
    		m = 2;
     
    	console.log( n.round( m ) );
     
    	console.log( Number.isInteger( n ) ); // false
     
    	console.log( Number.isInteger( m ) ); // true
     
    	$( "#block" ).css( "background", "red" ).slideUp();
     
    });
     
    $( window ).load( function(){
     
    });
     
    		});
    	</script>
    	<link href='http://fonts.googleapis.com/css?family=Sofia|Ubuntu:400|Kreon'>
    	<link rel="stylesheet" href="http://danielhagnoul.developpez.com/styles/dvjhRemBase.css">
    	<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/themes/sunny/jquery-ui.min.css">
    	<style>
    		/* TEST -- Nota bene : ici 1 rem est égal à 1 px, voir dvjhRemBase.css */
     
    		#block { position: relative; margin: 12px; width: 100px; height: 100px; background: green; }
     
    	</style>
    </head>
    <body>
    	<header>
    		<hgroup>
    			<h1>Forum jQuery</h1>
    			<h2>
    				<a href="">Lien</a>
    			</h2>
    		</hgroup>
    	</header>
    	<section class="conteneur">
     
    <div id="block"></div>
     
    	</section>
    	<footer itemscope itemtype="http://danielhagnoul.developpez.com/">
    		<time datetime="2013-08-30T20:13:27.137+02:00" pubdate>2013-08-30T20:13:27.137+02:00</time>
    		<span itemprop="name">Daniel Hagnoul</span>
    		<a href="http://www.developpez.net/forums/u285162/danielhagnoul/" itemprop="url">@danielhagnoul</a>
    		<a href="http://danielhagnoul.developpez.com/" itemprop="url">Mon cahier d’exercices</a>
    		<a href="http://javascript.developpez.com/faq/jquery/" itemprop="url">FAQ</a>
    		<a href="http://javascript.developpez.com/cours/?page=frameworks#jquery" itemprop="url">Tutoriels</a>
    	</footer>
    </body>
    </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.)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 20
    Par défaut
    Je te remercie de cette réponse! Donc il serait a priori impossible d'associer une méthode commune à tous les objets ?

Discussions similaires

  1. Object.prototype.isin = function()
    Par sacapuss2 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/07/2011, 16h52
  2. Conflit jQuery et SWF
    Par Speedboyz30 dans le forum jQuery
    Réponses: 2
    Dernier message: 13/08/2009, 10h25
  3. [Prototype] Equivalent de jQuery.find() avec prototype ?
    Par CUT HERE dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 11/05/2009, 10h53
  4. Object.prototype sous IE
    Par cetoto dans le forum Bibliothèques & Frameworks
    Réponses: 2
    Dernier message: 14/01/2008, 16h05

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