js中用物件字面量方法建立一個對象,var obj={};既然沒有呼叫Object建構函數,為什麼還是其實例了?這樣的物件不就應該是空的對象嗎?為什麼其原型是Object.prototype?
var obj = {}; 只是一種簡寫方式,相當於 var obj = Object.create({});
Object.create(null); 可能是個空物件。
這事兒你得問問Brendan Eich。
Brendan Eich
我覺得你先說說,你定義的所謂空对象是啥。
空对象
按照你的題目描述,我猜你所謂的空对象应该是指最原始的那个对象原型吧?这个东西是有的,它是null應該是指最原始的那個物件原型吧?這個東西是有的,它是null,所有物件原型鏈的盡頭都是它。
null
js是有空對象的
Object.create(null);
實踐是驗證真理的唯一標準
從概念上來講, Object 被定義為所有物件的根物件, 是"物件導向"這個概念最基本單位(參考), 去掉以後整個概念都會崩塌; 你能想像物質沒有分子/原子?
不管你是new創建的還是用字面量創建, 編譯器都會自動給對象認祖歸宗
呀, null 例外, 這玩意兒本身就是個特例啊. js一開始把它當對象, 是然後後續的Object.create(null) 才會出現所謂的"空對象"現象, 如果一開始把它定為一個特殊值, 那就沒有Object.create(null) 啥事了.所以在我理解裡, 這種"空對象"是一種定義上的自洽和銜接, 並不應該歸於"面向對象"這個概念裡.
var obj = {}; 只是一種簡寫方式,相當於 var obj = Object.create({});
Object.create(null); 可能是個空物件。
這事兒你得問問
Brendan Eich
。我覺得你先說說,你定義的所謂
空对象
是啥。按照你的題目描述,我猜你所謂的
空对象
应该是指最原始的那个对象原型吧?这个东西是有的,它是null
應該是指最原始的那個物件原型吧?這個東西是有的,它是null
,所有物件原型鏈的盡頭都是它。js是有空對象的
實踐是驗證真理的唯一標準
從概念上來講, Object 被定義為所有物件的根物件, 是"物件導向"這個概念最基本單位(參考), 去掉以後整個概念都會崩塌;
你能想像物質沒有分子/原子?
不管你是new創建的還是用字面量創建, 編譯器都會自動給對象認祖歸宗
呀, null 例外, 這玩意兒本身就是個特例啊. js一開始把它當對象, 是然後後續的Object.create(null) 才會出現所謂的"空對象"現象, 如果一開始把它定為一個特殊值, 那就沒有Object.create(null) 啥事了.
所以在我理解裡, 這種"空對象"是一種定義上的自洽和銜接, 並不應該歸於"面向對象"這個概念裡.