jQuery 核心

jQuery 核心 “3.0.0-pre”

1.插件機制 jQuery.extend(object)jQuery.fn.extend(object)

jQuery.fn = jQuery.prototype={};
jQuery.extend = jQuery.fn.extend = function() {}

區別:
jQuery.extend(object):擴展的是jQuery這個對象本身,相當於對jQuery這個對象裏面添加了方法;用法:$.~;
jQuery.fn.extend(object):擴展的是jQuery的原型裏面的方法,是對於個體來說。需要實例化對象才能使用;eg:$(“input”).~;

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

小結:如果jQuery是人這個類的話,那麼extend就是往這個類裏面添加男人、女人、老人、小孩……;而fn.extend就是給特定的人添加唱歌、跳舞;一般添加插件就用(jQuery.fn.extend());

2.多庫共存jQuery.noConflict(Boolean),這個方法主要是確保jQery不會與其它的庫裏的$對象發生衝突;
源碼:

var

    // Map over jQuery in case of overwrite
    _jQuery = window.jQuery,

    // Map over the $ in case of overwrite
    _$ = window.$;

jQuery.noConflict = function( deep ) {
    if ( window.$ === jQuery ) {
        window.$ = _$;
    }

    if ( deep && window.jQuery === jQuery ) {
        window.jQuery = _jQuery;
    }

    return jQuery;
};

if ( !noGlobal ) {
    window.jQuery = window.$ = jQuery;
}

用法:
1.上面的_jQuery/_$都爲undefined;因爲在他們下面window.jQuery 和 window.$才被賦的值,聲明是在作用域的頂端所以是undefined
2.noConflict方法返回的是jQuery對象,所以可以你自己定義方法名;eg:var jq = jQuery.noConflict(true);用Boolean值得原因是把方法名的jQuery也去掉;
3.如果只與其它的庫同名$,那麼就可以直接調用 jQuery.noConflict()方法;從源碼中就可以看出,這樣就不會進第二個if判斷語句;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章