### 1、$符號的由來
**$符號本質就是函數的名字。**
jquery源碼分析

通過分析我們知道,在jquery里邊不只可以使用$符號,還可以使用jQuery標志
**解決沖突問題**
有的項目是中間過渡項目(prototype和jquery框架都有使用)
- prototype框架也使用$符號
- jquery里邊也使用符號現在就分不清楚符號到底是prototype框架的 還是 jquery框架的
jquery本身有方法可以是的$符號的使用權被讓出來
~~~
jQuery.extend({
noConflict: function( deep ) {
//使用一個空變量_$,把$符號給覆蓋
window.$ = _$;
if ( deep ) {
//使用一個空變量_jQuery把jQuery使用權收回
window.jQuery = _jQuery;
}
return jQuery;
},
~~~
~~~
<script>
//通過jquery指定方法讓出$符號的使用權
//被讓出使用權的$符號,就不能出現在jquery的應用里邊
//var jq = $.noConflict(); //收回$符號使用權
var jq = $.noConflict(true); //"$符號"和"jQuery"兩個使用權都被收回
function f1(){
//alert($("div").html());
//alert(jQuery("div").html());
console.log(jq("div").html());
console.log(jQuery("div").html()); //不允許使用jQuery
}
</script>
<body>
<div>I am bread</div>
<input type="button" value="觸發" onclick="f1()" />
</body>
~~~
### 2、jQuery對象與dom對象的區別和聯系
- jquery對象——$(“li”)
- dom對象——document.getElementById(‘one’);
**1. jquery對象創建過程中如何封裝dom代碼**

結論:`$(“#one”)[0] = document.getElementById(‘one’);`
**2. jquery對象轉化為dom對象**
a) jquery對象[下標] 例如 `$(“#one”)[0]`
~~~
//jquery對象調用dom對象的方法
$("#one")[0].setAttribute("class","pear");//說明jquery對象轉化為了dom對象
~~~
在jquery對象里邊獲得指定的dom對象
$(“li”)多個節點
~~~
//jQuery 對象轉換為Domd對象
$("li")[3].style.color ="red";
~~~
**3. dom對象轉換為jquery對象**
a) var dv = document.getElementById(‘id’);
b) $(dv) 轉化完畢
~~~
//$("#one").css('color','red');
//$("#one")就是對dom代碼的封裝(document.getElementById)
//利用dom對象調用jquery的方法(失敗)
var dv = document.getElementById("one");
//jquery封裝dom代碼(dom對象)
//$(dv) dv是div元素節點 nodeType=1(dom對象轉化為jquery對象)
$(dv).css("color","green");
~~~
### 3、jquery對象分析
jquery對象創建:jQuery.fn.init(); (從105行——219行)
但是 css() html() attr() addClass()等方法在 100多行的init()里邊沒有具體的操作方法
下面來分析代碼結構:
- jQuery.fn 代碼:104—338行
- jQuery.fn.init 代碼:105—219行
- jQuery.fn.init.prototype = jQuery.fn;
-
jQuery.fn.init通過原型鏈繼承jQuery.fn

jQuery.fn.init創建——>jQuery.fn.init 繼承 ——> jQuery.fn (例如 length、jquery、size屬性調用 ——> jQuery.fn 繼承extend 冒充繼承 (例如 addClass attr removeAttr)
~~~
jQuery.fn.init.prototype = jQuery.fn;
jQuery.extend = jQuery.fn.extend = function() {}
~~~
- jquery對象創建完畢需要向上繼承**兩層**關系
- jquery之所以會調用許多相關方法,也是繼承得來的方法
**jquery在使用的時候可以使用兩種對象**
1. $(“#one”) 是普通jQuery.fn.init創建出來的對象
1. $.get(“url”) 不是jQuery.fn.init創建,而是jquery內部的jQuery對象
1.
例如: `$.noConflict()``$`符號就是內部jQuery對象

該對象$,代碼行數22—915行
`$`符號對象本身也有冒充繼承,我們直接調用$符號的相關方法,首先去22-915行找,如果沒有,就去extend繼承方法里邊找

系統里邊有兩套extend冒充繼承:**普通jquery對象的、$符號的**
### 4、總結:
- 1、 $符號由來
- 2、 jquery對象與dom對象互相轉化
- 3、 jquery對象分析
- a) jquery生成好的對象繼承 jQuery.fn
- b) jQuery.fn 通過冒充繼承 extend,又得到了許多屬性和方法