簡體   English   中英

如何在 javascript 中獲取對象的名稱?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM