new
new配合構(gòu)造函數(shù)使用惰许,創(chuàng)建一個新對象孙乖。
在javascript中橄浓,只有function(javascript中function也是對象)才有prototype屬性。定義一個函數(shù)涎才,它的prototype默認(rèn)是一個空對象鞋既,即{}。
函數(shù)有了prototype屬性耍铜,由函數(shù)創(chuàng)建的對象才有原型的概念。person1由Person函數(shù)構(gòu)建出來的跌前,所以person1的原型就是Person.prototype棕兼。javascript使用proto指向?qū)ο蟮脑汀?p>
由此可以總結(jié)new做了:
- 創(chuàng)建實例對象person1
- 調(diào)用構(gòu)造函數(shù)(Person)初始化person1成員變量(firstname)。
- 指定實例對象的原型為Person.prototype對象抵乓。即person1.proto指向Person.prototype伴挚。
var obj={} //創(chuàng)建一個空對象實例
Object.create()
Object.create(o)的作用是創(chuàng)建一個空對象,空對象的原型是參數(shù)o:
o2為空對象灾炭,但o2.name輸出了‘jian茎芋,在對象o2上沒有找到name屬性,怎在原型o上找到了蜈出。
由此可以總結(jié)new`做了:
- 創(chuàng)建空對象{}
- 指定空對象{}的原型為Object.create()的參數(shù)田弥。
返回新對象屬性:
function formatItem( arr ){
return arr.map((item)=>{
let newItem = Object.create(null);
newItem.name = item.name;
newItem.value = item.id;
newItem.constructor=Object;
return newItem;
});
}