一、主要區別 1、{} 和 new Object() 除了本身創建的對象,都繼承了 Object 原型鏈上(Object.prototype)的屬性或者方法,eg:toString();當創建的對象相同時,可以說 {} 等價於 new Object() 。2、Object.create() 是將創建 ...
一、主要區別
1、{} 和 new Object() 除了本身創建的對象,都繼承了 Object 原型鏈上(Object.prototype)的屬性或者方法,eg:toString();當創建的對象相同時,可以說 {} 等價於 new Object() 。
2、Object.create() 是將創建的對象繼承到原型鏈上,而本身沒有繼承 Object.prototype 的屬性和方法。
二、Object.create的用法
1.Object.create也可以創建一個空對象,但是他的原型如果不指定則沒有
let obj3 = Object.create(null)
2.Object.create如果值是某個對象那麼他的原型就是這個對象
let obj1 = { a:10, b:20, sum(){ return this.a + this.b } } let obj5 = Object.create(obj1)
3.這時候obj5不等於obj1,而obj5的原型等於obj1,如果obj1新增屬性,同步obj5的原型也可以獲得
最後總結:
Object.cerate() 必須接收一個對象參數,創建的新對象的原型指向接收的參數對象,
new Object() 創建的新對象的原型指向的是 Object.prototype. (表述有點啰嗦,簡潔點說就是前者繼承指定對象, 後者繼承內置對象Object)
可以通過Object.create(null) 創建一個乾凈的對象,也就是沒有原型,
而 new Object() 創建的對象是 Object的實例,原型永遠指向Object.prototype.