AFAIK, es gibt keine Möglichkeit, dies zuverlässig zu tun, es sei denn, Sie wechseln zu einem Array. Was ehrlich gesagt nicht seltsam erscheint - es scheint mir ziemlich einfach zu sein, dass Arrays zählbar sind und Objekte nicht.
Wahrscheinlich ist der nächste, den Sie bekommen, so etwas
// Monkey patching on purpose to make a point
Object.prototype.length = function()
{
var i = 0;
for ( var p in this ) i++;
return i;
}
alert( {foo:"bar", bar: "baz"}.length() ); // alerts 3
Dies schafft jedoch Probleme oder zumindest Fragen. Alle vom Benutzer erstellten Eigenschaften werden gezählt, einschließlich der Funktion _length selbst! In diesem einfachen Beispiel können Sie dies vermeiden, indem Sie nur eine normale Funktion verwenden. Dies bedeutet jedoch nicht, dass Sie andere Skripte daran hindern können, dies zu tun. also, was machst du? Funktionseigenschaften ignorieren?
Object.prototype.length = function()
{
var i = 0;
for ( var p in this )
{
if ( 'function' == typeof this[p] ) continue;
i++;
}
return i;
}
alert( {foo:"bar", bar: "baz"}.length() ); // alerts 2
Am Ende denke ich, Sie sollten wahrscheinlich die Idee aufgeben, Ihre Objekte zählbar zu machen und einen anderen Weg finden, um das zu tun, was Sie gerade tun.