Javascript obtém o nome da chave do object

Como eu poderia obter o nome da chave para o seguinte? Por exemplo, eu quero “button1” e “button2”?

var buttons = { button1: { text: 'Close', onclick: function(){ } }, button2: { text: 'Close2', onclick: function(){ } } } var i; for(i in buttons){ if(buttons.hasOwnProperty(i)){ alert(buttons[i].text); } } 

Eu tentei usar .push() embora isso não funcionou.

Isso pode ser melhor entendido se você modificou um pouco a formulação:

 var buttons = { foo: 'bar', fiz: 'buz' }; for ( property in buttons ) { console.log( property ); // Outputs: foo, fiz or fiz, foo } 

Note aqui que você está iterando sobre as propriedades do object, usando a property como uma referência para cada um durante cada ciclo subseqüente.

MSDN diz for ( variable in [object | array ] ) o seguinte:

Antes de cada iteração de um loop, a variável é atribuída ao próximo nome de propriedade do object ou ao próximo índice de elemento do array. Você pode usá-lo em qualquer uma das instruções dentro do loop para referenciar a propriedade do object ou o elemento da matriz.

Observe também que a ordem de propriedade de um object não é constante e pode ser alterada, diferentemente da ordem de índice de uma matriz. Isso pode ser útil.

O ECMAscript edition 5 também oferece os methods puros Object.keys() e Object.getOwnPropertyNames() .

assim

 Object.keys( buttons ); // ['button1', 'button2']; 

Alterar alert(buttons[i].text); alert(i);

Variável i é o nome da sua chave.

Supondo que você tenha access ao Prototype, isso pode funcionar. Eu escrevi este código para mim há poucos minutos; Eu só precisava de uma única chave de cada vez, por isso não é tempo eficiente para grandes listas de pares chave: valor ou para cuspir vários nomes de chaves.

 function key(int) { var j = -1; for(var i in this) { j++; if(j==int) { return i; } else { continue; } } } Object.prototype.key = key; 

Isso é numerado para funcionar da mesma maneira que os arrays, para economizar dores de cabeça. No caso do seu código:

 buttons.key(0) // Should result in "button1"