Object.create 和 null
我们先看看MDN上关于Object.create与null的描述:
Object.create(): 该方法创建一个新对象,使用现有的对象来提供创建的对象的__proto__。如果proto参数不是null或者非原始包装对象,则抛出一个TypeError异常null: 特值对象的值未设置,是JavaScript的基本类型之一,在布尔运算中被称为是falsy
原型链
通过Object.create()的描述,我们可以轻易得到以下结论:
let objOrigin = {age: 18};
let obj = Object.create (objOrigin);
obj.__proto__ === objOrigin; // true
然后再来看看原型链:
Object.prototype.__proto__ === null; // true
let o = Object.create(null);
按理来说 o.__proto__ === null应该为true
o.__proto__ === null; // false
o === null; // false
那么为什么会出现false的情况呢,我们打开控制台查看一下o:
发现
o里面什么都没有,但是可以看出o是一个什么都没有的空对象,甚至连__proto__都没有。
typeof o; // 'objcet'
typeof null; // 'object'
Object.prototype.toString.call(o); // '[object Object]'
Object.prototype.toString.call(null); // '[object Null]'
结论
经过以上探讨可以得出以下结论:
经过Object.create(null) 创建出来的结果是一个空对象,但是又不是普通的空对象,里面没有任何信息,包括__proto__。
一般创建的对象有原型链:
如有错误,欢迎读者指出。