什麼關係?web
多對多數組
如何創建的?微信
data中徐行的get()中創建關係,dep.subs watcher.depIdsapp
何時創建?svg
初始化,解析模板中的表達式時 ,new Watcher對象時創建;函數
Array.apply(null, { length: 20 }).map(function () { return createElement('p', 'hi') })
apply函數不是接受數組的嗎?爲何能夠接受對象;帶着好奇我查了下文檔,原來從es5開始早已規定,apply接受數組或者類數組,就是說只要有一個 length
屬性和(0..length-1)
範圍的整數屬性。例如如今能夠使用 NodeList
或一個本身定義的相似 {'length': 2, '0': 'eat', '1': 'bananas'}
形式的對象。es5
那爲何要用apply,不直接new Array(5)?我試了下spa
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-iGHgrXCB-1593681635965)(C:\Users\18070121\Desktop\微信截圖_20200701151104.png)]pwa
Array(5).map返回仍是{length: 5}的空數組對象,而Array.apply(null,{length:4})就能返回四個已經初始化的數組;這也就是爲何能夠map遍歷的緣由;
那麼既然apply能夠,那跟他一樣功能的call函數可不能夠呢?
下面是我試的結果;code
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-BaqT4OvP-1593681635968)(C:\Users\18070121\Desktop\微信截圖_20200701151831.png)]
…(img-BaqT4OvP-1593681635968)]
結果是不能夠的,Array.call(null,{length:4})生成了一個下標爲0,值爲{length:4}的空數組,跟new Array(4) 結果同樣;因而可知只有apply的{length:4}的傳參方式纔會建立一個初始化下標的數組;若是你非要用call,那就只能這樣啦 Array.call(null,undefined,undefined,undefined)
;