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) 啥事了.
所以在我理解里, 这种"空对象"是一种定义上的自洽和衔接, 并不应该归于"面向对象"这个概念里.