[英]How to get an object's full name and “path” in a Javascript console?
假設我有一個大型SPA,我可以查看其來源。 現在在那里有一個對象,其中包含我想要查看和/或更改的數據以用於調試目的。
我可以在代碼中放置一個console.log(myObject)
,它會在控制台中顯示,這很好......但是如何在當前窗口中輸出對象的完整路徑或全名 ,這樣我才能打開一個JS控制台並輸入例如:
window.myApp.something.anothersomthing[12].myObject
然后得到我的對象? 我所能找到的就是如何打印這種類型,但這並沒有幫助。 有任何想法嗎?
這是一個非常天真的實現,它允許您在對象圖中搜索對象並打印出遇到此對象的路徑。
有一些警告:
正如您在代碼段中看到的那樣,我將window.myApp
作為上下文傳遞以啟動搜索。 如果您傳入window
,則會遇到許多錯誤。
例如,在Chrome中, window.clientInformation.plugins[0] === window.clientInformation.plugins[0]
計算結果為false,這使得無法跟蹤已訪問過的對象。
有許多實現細節可能導致下面的腳本行為不當(getter,代理,生成器......)。
function search(object, context) { let found = []; let visited = []; let visit = (object, reference, path) => { if (object === reference) { found.push(path); } if (!visited.includes(reference)) { visited.push(reference); if (Array.isArray(reference)) { for (let i = 0; i < reference.length; i++) { visit(object, reference[i], path + '[' + i + ']'); } } else if (reference === Object(reference)) { // test for object for (let key in reference) { visit(object, reference[key], path + '.' + key); } } } } visit(object, eval(context), context); return found; } // example let myObject = {}; let myApp = { something: { anotherSomething: [null, null, null, null, null, null, null, null, null, null, null, null, { myObject: myObject }] } }; window.myApp = myApp; console.log(search(myObject, 'window.myApp'));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.