2010-04-02 5 views
0

Je tentais ce qui suit:jQuery.extend ne fonctionne pas dans Internet Explorer, mais fonctionne dans Firefox

var Class1 = function() {} 
Class1.prototype = { 
    MyMethod: function() { /* Do Stuff */ } 
} 

var Class2 = function() {} 
Class2.prototype = { 
    AnotherMethod: function() { /* Do More Sweet Stuff */ } 
} 

jquery.extend(true, Class1, Class2); 

je devrais attendre maintenant de pouvoir effectuer les opérations suivantes:

var c = new Class1(); 
c.AnotherMethod(); 

Dans Firefox 3.6 cela fonctionne très bien. Dans Internet Explorer 7 & 8, il est dit "L'objet ne supporte pas cette propriété ou méthode". Suis-je en train de mal comprendre comment $ .extend devrait fonctionner, ou est-ce que IE se comporte mal?

jQuery Version: 1.3.2

Merci!

+3

Cela pourrait-il être quelque chose à voir avec votre boîtier sur 'jquery.extend (...)'? Ne devrait-il pas être 'jQuery.extend (...)'? –

Répondre

1

Le premier paramètre à extend doit être la cible de l'extension Class1 pour inclure les propriétés de Classe2. Donc, vous devriez plutôt faire:

var c; 
jQuery.extend(c, Class1, Class2); 

À moins que vous vraiment aviez l'intention de faire une copie en profondeur, dans ce cas, le premier paramètre doit être vrai, et la cible, suivi par les classes:

jQuery.extend(true, c, Class1, Class2); 
0

C'est tout ce dont vous avez besoin. Maintenant Class1 aurait dû être étendue avec les propriétés de Class2

jQuery.extend(Class1, Class2); 

Vérifier jQuery.extend documentation

0

J'utilise

Class2 = $.extend(true,{},Class1,Class2); 

Et j'ai même question de la méthode ne trouve que dans IE8. Firefox 3.6 est idéal pour Opera 10.

En plus, l'erreur est incohérente. Quand je rafraîchis la page je pourrais ou ne pas obtenir le problème encore.

Je pense que dans mon cas cela pourrait être lié à la façon dont mon script est chargé. Mais encore .... IE cause problème ... encore une fois.

+0

J'ai ajouté $ (document) .ready() pour chaque extension que j'ai et il a résolu mon problème sur IE8. En ce moment, toutes mes classes sont dans des fichiers séparés et chargées via une fonction de chargement paresseux. Pour la production, tout sera fusionné et minifié. – Bastan

Questions connexes