【问题标题】:How does jQuery distinguish between $() and $.method calls? [duplicate]jQuery 如何区分 $() 和 $.method 调用? [复制]
【发布时间】:2016-05-11 13:52:17
【问题描述】:

查看旧 jQuery 版本的休闲结构:

(function( window, undefined ) {

    var jQuery = (function() {

        var jQuery = function( selector, context ) {
            return new jQuery.fn.init( selector, context );
        };

        jQuery.fn = jQuery.prototype = {
            init: function( selector, context ) {
                // ...
                return this;
            }
            // jQuery API methods
        }

        // Give the init function the jQuery prototype for later instantiation
        jQuery.fn.init.prototype = jQuery.fn;

        return (window.jQuery = window.$ = jQuery);

    })();

})(window);

这很容易理解:

jQuery.fn = jQuery.prototype = {
    init: function( selector, context ) {
        return this;
    }
}
jQuery.fn.init.prototype = jQuery.fn;

是在以正常用法调用 jQuery 时触发的一个部分,例如

$('p')

jQuery('p')

目前还不清楚如何使用 $.ajax()$.isArray() 形式调用 API 方法,以及您将在哪里放置(比方说)列出的代码中的自定义方法并使用 $.myCustomMethod( )。 任何帮助将不胜感激。

【问题讨论】:

  • 其实很简单……想想这个提示:每个函数在 JavaScript 中也是一个普通对象。
  • 我不确定是什么问题:$ 有属性,这些属性可以是方法。

标签: javascript jquery


【解决方案1】:

你可以自己写一个函数:

function something(n) {
  return n + 1;
}

然后调用它:

var x = something(0);

你也可以给函数附加属性,因为它是一个对象:

something.else = function(n) {
  return n - 1;
};

然后您可以通过属性引用调用该函数:

var y = something.else(0);

jQuery 库使用全局 jQuery 对象(通常称为$)作为放置通常有用但与元素或对象集合没有任何隐式关系的函数集合的地方各种jQuery“方法”做了什么。一个明显的例子是$.ajax(),它非常有用,但实际上与 DOM 没有任何关系。

通过将所有这些函数保留为 $ 的属性,库可以避免“污染”全局地址空间。

【讨论】:

  • 很好的解释。清晰易懂
  • 我稍后阅读了您的答案更新。感谢您的进一步解释。
  • @Vincent 您可以将自己的函数添加到$ - 只需执行类似$.vincent = function(x, y, z) { ... }; 的操作。无论如何,当您使用 jQuery 时,管理自己的全局函数并不是一个坏方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-06
  • 1970-01-01
  • 2012-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-23
相关资源
最近更新 更多