2010-08-23 3 views
1

При использовании JQuery расширение объекта с переопределенной функцией toString() приводит к ошибке «Операция не поддерживается» в Firefox. Однако в Chrome он отлично работает. Является ли это ошибкой в ​​JQuery или я делаю что-то неправильно в приведенном ниже фрагменте кода?JQuery Extend - операция не поддерживается в 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 

JQuery версии 1.4.2

Большое спасибо,

Godders

ответ

1

При вызове анонимной функции, чтобы получить значение "Foo", переменная this будет ссылаясь на объект окна. То же самое касается анонимной функции, которую вы вызываете для «foo2». Таким образом, вы пытаетесь расширить объект окна. Это действительно то, что вы хотите сделать?

Редактировать что-то похожее на срабатывание Firefox - это попытка скопировать атрибут «sessionStorage» window. Попробуйте добавить эту строку:

var test = window['sessionStorage']; 

, и вы получите ту же ошибку.

+0

Спасибо за ответ. Это побудило меня вернуться и перечитать 4 шаблона Invocation в книге «Хорошие детали» Крокфорда. – Godders

+0

Итак, чтобы я хотел выполнить, нужно var that = {}; как в функциях foo, так и в foo2. Спасибо за помощь. – Godders

+0

Добро пожаловать! Удачи! – Pointy