## Object.create(IE9+)
### 問題拋出
```
var obj = {
getX:function(){
}
};
function Fn(){
}
Fn.prototype = obj;
```

因為更改了原本prototype的堆內存,自定義的又沒有constructor,So,我們發現

最終會指向`Object類`
```
var obj = {
constructor:Fn
,getX:function(){
}
};
function Fn(){
}
Fn.prototype = obj;
Fn.prototype.sum = function(){}
//此時Fn.prototype和obj都指向同一塊內存,嗯,不大好
var obj2 = {};
for(var key in obj){
if(obj.hasOwnProperty(key)){
obj2[key] = obj[key];
}
}
//將拷貝出來的新內存空間obj2的地址再賦給prototype即可
```
嗯,為了解決這個問題,ecma5提供了一個新API
### Object.create
該方法創建一個擁有指定原型和若干個指定屬性的對象
```
Object.create(proObj) //創建一個新的對象,但是還要把proObj作為這個對象的原型
```
```
var obj = {getX:function(){}};
var obj2 = Object.create(obj);
//->obj2
//__proto__:
// getX:function(){}
// __proto__:Object.prototype
obj2.getX();
obj.getY = function(){console.log(2)};
obj2.getY(); //2
```
Object.create實現
```
function object(obj){
function Fn(){};
Fn.prototype = obj;
return new Fn;
}
```
正常時使用
```
function Sum(){}
Sum.prototype = Object.create(obj);
Sum.prototype.constructor = Sum;
```
好處就是Sum.prototype和obj并不會指向同一個內存空間(不在一個層級);
這樣我們修改Sum的prototype,并不會直接影響到obj對象這一層
- 空白目錄
- window
- location
- history
- DOM
- 什么是DOM
- JS盒子模型
- 13個核心屬性
- DOM優化
- 回流與重繪
- 未整理
- 文檔碎片
- DOM映射機制
- DOM庫封裝
- 事件
- 功能組件
- table
- 圖片延遲加載
- 跑馬燈
- 回到頂部
- 選項卡
- 鼠標跟隨
- 放大鏡
- 搜索
- 多級菜單
- 拖拽
- 瀑布流
- 數據類型的核心操作原理
- 變量提升
- 閉包(scope)
- this
- 練習題
- 各種數據類型下的常用方法
- JSON
- 數組
- object
- oop
- 單例模式
- 高級單例模式
- JS中常用的內置類
- 基于面向對象創建數據值
- 原型和原型鏈
- 可枚舉和不可枚舉
- Object.create
- 繼承的六種方式
- ES6下一代js標準
- babel
- 箭頭函數
- 對象
- es6勉強筆記
- 流程控制
- switch
- Ajax
- eval和()括號表達式
- 異常信息捕獲
- 邏輯與和或以及前后自增
- JS中的異步編程思想
- 上云
- 優化技巧
- 跨域與JSONP
- 其它跨域相關問題
- console
- HTML、XHTML、XML
- jQuery
- zepto
- 方法重寫和方法重載
- 移動端
- 響應式布局開發基礎
- 項目一:創意簡歷