[英]how to get object's name in javascript?
例如我有這樣一個 object:
var a = {
'light': 'good',
'dark' : {
'black': 'bad',
'gray' : 'not so bad'
}
}
和這樣的代碼:
var test = function(obj) {
// do smth with object
// I need to get obj's name ('dark' in my way)
}
test(a.dark);
如何在函數體中獲取 object 的名稱。 所以我的意思是我應該知道obj的名字是'dark'。
我試過用螢火蟲檢查 object,但它只顯示對象的屬性。 它沒有顯示一些我可以知道的內部方法或屬性
謝謝你。
你不能。 你只是將對象{ black : 'bad', gray : 'not so bad' }
傳遞給test
。 這個對象本質上沒有名稱“dark”,它只是一個碰巧作為對象a
的屬性dark
存在的對象。 將此信息傳遞給函數時,此信息將無法挽回地丟失。
你基本上試圖在值傳遞給函數之前檢索保存值的變量名。 那是不可能的。
有可能:
function loadProps(obj, container) {
for (var p in obj) {
container.push(p);
if (obj[p].constructor == Object) {
loadProps(obj[p], container);
}
}
}
然后 :
var props = [];
loadProps(a, props);
console.log( props.join(",") );
“對象的名稱”不是對象的固有屬性。 “名稱”是給定上下文中的名稱。 將對象傳遞給函數時,只需傳遞該對象,而不是傳遞它的上下文(在示例中為“dark”)。
無論你想做什么,你都走錯了路。
我想指出您可以迭代一個對象並遞歸地找到某個屬性的父級名稱。 有了它,你的test
功能看起來像:
var test = function(rootobj,propname,rootObjName) {
// do smth with object AS rootobj[propname]
var objparents = findParents(rootobj,propname,rootObjName);
}
test(a,'dark','a');
findParents
是:
function findParents(obj,key,rootName){
var parentName = rootname || 'ROOT', result = [];
function iterate(obj, doIndent){
var parentPrevName = ''
for (var property in obj) {
if (obj.hasOwnProperty(property)){
if (obj[property].constructor === Object) {
parentPrevName = parentName;
parentName = property;
iterate(obj[property]);
parentName = parentPrevName;
}
if (key === property) {
result.push('Found parent for key ['
+key+' (value: '+obj[property]
+')] => '+parentName);
}
}
}
}
iterate(obj);
return result;
}
問題當然是財產不一定是唯一的。 如:
var a =
{
'light': 'good',
'dark' : {
'black': 'bad',
'gray' : 'not so bad'
'yellow' : {
'dark': 'will do', //<=there's 'dark' again!
'light':'never use'
}
}
}
好吧,可能是可用的。 你可以在http://jsfiddle.net/KooiInc/Kj2b9/找到findParents函數的演示
var a = { name:'a', 'light': 'good', 'dark' : { name: 'dark', 'black': 'bad', 'gray' : 'not so bad' } }
這樣你就可以做到
console.log(a.name,a.dark.name);
這可能有點愚蠢,但您可以包含一個新鍵,其值為 Object 名稱。
obj = {objName: "obj"}
它對我有用。 讓我知道這是否有幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.