jQuery自定义扩展不会抛出函数错误

时间:2015-07-01 08:40:44

标签: javascript jquery

当我尝试运行此功能时

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

像这样$.urlHash()我在Google Chrome控制台中收到错误urlHash() is not a function

从我所看到的(通过谷歌搜索),扩展名被正确写入。我做错了什么?

3 个答案:

答案 0 :(得分:2)

因为您正在以jQuery对象的静态方法访问该方法

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

当您将属性添加到$.fn时,它会被添加到jQuery对象的原型对象中,因此您需要使用jQuery对象的实例来访问它

答案 1 :(得分:1)

删除对象上使用的fn

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

答案 2 :(得分:0)

建议使用fn.extend函数扩展jQuery对象,而不是直接(doc)。

但是,在您的情况下,您不想扩展jQuery对象(其中一个用法看起来像$('selector').extendedFunction()),而是声明一个无上下文的函数。您决定将该函数附加到“jQuery命名空间”($ vs $())是有效的,尽管很奇怪。您也可以决定扩展任何其他“命名空间”或只是扩展全局命名空间。