[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")
})
```