2015-07-01 2 views
1

Когда я пытаюсь запустить эту функциюJQuery пользовательского расширения бросков не функция ошибки

(function($) { 
    $.fn.urlHash = function() 
    { 
     return document.URL.substr(document.URL.indexOf('#')+1); 
    }; 
})(jQuery); 

как так $.urlHash() я получаю сообщение об ошибке в консоли Google Chrome говоря urlHash() is not a function.

Из того, что я мог видеть (по Googling), расширение написано правильно. Что я делаю не так?

ответ

2

Поскольку вы обращаетесь к методу как статический метод объекта JQuery

(function ($) { 
    $.urlHash = function() { 
     return document.URL.substr(document.URL.indexOf('#') + 1); 
    }; 
})(jQuery); 

При добавлении свойства $.fn оно добавляется к объекту-прототипу объекта JQuery, так что вы должны использовать экземпляр JQuery объект для доступа к нему

+0

Спасибо за объяснение. :) – Albert

1

Удалить fn, который используется на объектах.

(function ($) { 
    $.urlHash = function(){ 
     return document.URL.substr(document.URL.indexOf('#') + 1); 
    }; 
})(jQuery); 
0

Рекомендуется, чтобы расширить объект JQuery с помощью функции fn.extend, а не непосредственно (doc).

В вашем случае, однако, вас не интересует расширение объекта jQuery (где использование может выглядеть как $('selector').extendedFunction()), а скорее объявить контекстуальную функцию. Вы решили прикрепить эту функцию к «пространству имен jQuery» ($ vs $()), хотя это и нечетно. Вы могли бы также решить расширить любое другое «пространство имен» или просто расширить глобальное пространство имен.

Смежные вопросы