[TOC]
## 1.如何理解原型鏈
> 1.所有引用類型都具有對象特性,即可自由擴展屬性(除了null)
> 2.所有引用類型都有一個_proto_屬性,屬性值都是一個普遍對象
> 3.所有函數都有一個prototype屬性,屬性值也是一個普遍對象
> 4.所有引用類型的_proto_屬性值都指向它的構造函數的prototype屬性值
> 5.當使用對象屬性時,如果對象本身沒有這個屬性,那么它就會去它的的_proto_(即它的構造函數的prototype)中尋找
## 2.構造函數
> 以大寫字母開頭的函數被認為是構造函數
```
function Foo(){...} --> var Foo = new Function(...)
var a = [] ---> var a = new Array ()
var b = {} ---> var b = new Object ()
```
### 構造函數的判斷`instanceof`
```
Array instanceof object
```
### 擴展基本數據類型
```
typeof 37 === 'number'
console.log( typeof(37) )
```
## 3.dom封裝理解原型鏈
### 構造函數 以大寫字母開頭
```
// 封裝獲取Dom節點
function Elem(id){
this.elem = document.getElementById(id)
}
//封裝改變dom節點內容
Elem.prototype.html = function(val){
var elem = this.elem
if(val){
elem.innerHTML = val
return this
}else{
return elem.innerHTML
}
}
//封裝監聽事件
Elem.prototype.on = function(type,fn){
this.elem.addEventListener(type,fn)
return this
}
// new一個實例對象
var div1 = new Elem("div1")
// console.log(div1.html('<p>ni hao</p>'))
div1.on("onclick",function(){
alert("nhao")
})
```