Object.create(null) 和 {} 的區別
阿新 • • 發佈:2018-12-08
這兩天在看vue的原始碼,發現作者定義對映字典的時候,喜歡用Object.create(null),而不是直接定義一個物件字面量,那麼兩者有什麼區別呢,又存在什麼業務場景呢
let m = Object.create(null);
let n = {};
// 猜測下,m和n有什麼區別呢
console.log(m);
console.log(n);
複製程式碼
就是一個純粹的空物件
繼承了物件原型的空物件,也就是說存在n.toString();
Object.create(proto, [propertiesObject]) 方法
- proto 新建物件的原型物件
- propertiesObject 可選,新增到新建物件的屬性(不是原型鏈的屬性),預設可列舉,引數對應Object.defineProperties的第二個引數
{} 相當於 Object.create(Object.ptototype), 現在你明白他們之間的區別了吧
for...in可以遍歷n的原型屬性
試了一下發現沒有列印toString\get\set方法屬性,後來才發現混淆了兩個概念,就是__proto__和prototype
這個__proto__屬性, 是一個物件的隱式原型,指向構造該物件的建構函式的原型
function A() {
console.log('我是函式A')
};
let a = new A();
console.log(a.__proto__ === A.prototype) // true
複製程式碼
這個以後再做深入討論。
ps。剛開始用md語法寫文件,用的還不是很熟練,以後有更多跟有內含的文章給大家分享,加油加油!