2010-08-23 5 views
1

Lors de l'utilisation de JQuery, l'extension d'un objet avec une fonction toString() surchargée provoque une erreur «Opération non prise en charge» dans Firefox. Cependant, dans Chrome, cela fonctionne bien. Est-ce un bug dans JQuery ou est-ce que je fais quelque chose de mal dans l'extrait de code ci-dessous?JQuery Extend - l'opération n'est pas prise en charge dans Firefox

var foo = function() { 
     var that = this; 

     that.toString = function() { return "foobar" }; 

     return that; 
    }(); 

    var foo2 = function() { 
     var that = this;    

     that = $.extend(true, {}, foo); // copy = options[ name ]; = "Operation is not supported" in Firefox 3.6.8 

     return that; 
    }(); 

    alert(foo.toString()); //"foobar" in Chrome 
    alert(foo2.toString()); //"foobar" in Chrome 

Version JQuery 1.4.2

Un grand merci,

Godders

Répondre

1

Lorsque vous appelez la fonction anonyme pour obtenir la valeur, la variable this "foo" sera référencer l'objet fenêtre. Il en va de même pour la fonction anonyme que vous appelez "foo2". Ainsi, vous essayez d'étendre l'objet window. Est-ce vraiment ce que vous voulez faire?

modifier ce que Firefox semble trébucher sur est la tentative de copier l'attribut « sessionStorage » de window. Essayez d'ajouter cette ligne:

var test = window['sessionStorage']; 

et vous obtiendrez exactement la même erreur.

+0

Merci pour la réponse. Cela m'a incité à revenir en arrière et à relire les 4 modèles d'Invocation dans le livre "Good Parts" de Crockford. – Godders

+0

Ok, donc ce que je voulais faire nécessite var that = {}; dans les fonctions foo et foo2. Merci pour l'aide. – Godders

+0

De rien! Bonne chance! – Pointy