/ / JavaScript, tablica „tego” i więcej o tablicach - javascript, tablice

JavaScript, tablica "tego" i więcej o tablicach - javascript, tablice

Widziałem fragment kodu, którego nie mogę zrozumieć:

for (var m in client.actorTypes[d[5]]) {
if (m !== "update" && m !== "destroy" && m !== "remove") {
this[m] = client.actorTypes[d[5]][m];
}
}

ale actorTypes nie jest tablicą 2D:

Game.prototype.BaseActor = function(rate) {
this.updateRate   = rate;
this.onCreate     = function(data, complete) {};
this.onUpdate     = function(data) {};
this.onEvent      = function(data) {};
this.onInterleave = function() {};
this.onDraw       = function() {};
this.onDestroy    = function(complete) {};
};

Game.prototype.Actor = function(id, rate) {
return this.$.actorTypes[id] = new this.BaseActor(rate);
};

Właściwie to nie wiem, co dzieje się w tym kodzie. Czy ktoś może mi to wyjaśnić? Co to jest this tablica i jak to możliwe actorTypes stać się tablicą 2d?

Odpowiedzi:

1 dla odpowiedzi № 1

Tablice nie mają z tym nic wspólnego.

W Javascript możesz uzyskać dostęp do właściwości obiektu na jeden z dwóch sposobów:

  1. theObject.theProperty
  2. theObject["theProperty"]

metoda 1 jest to możliwe tylko z literalną, prawidłową nazwą zmiennej; metoda 2 pozwala na użycie dowolnego wyrażenia (np. w twoim przypadku zmiennej łańcuchowej).

Tablice są szczególnym przypadkiem obiektów JavaScript, które mają właściwości o nazwach numerycznych. Używamy metody 2 aby uzyskać do nich dostęp, ponieważ prawidłowe nazwy zmiennych nie mogą zaczynać się (lub być wyłącznie) liczbami.

To nie znaczy, że za każdym razem widzisz x[y], x musi być tablicą, ponieważ wcale tak nie jest.

Wyjaśniający przykład przedstawia się następująco:

var o = {
"a": {
"b": 5
}
};

var x = "a", y = "b";

console.log(o.a.b);       // Output: 5
console.log(o["a"]["b"]); // Output: 5
console.log(o[x][y]);     // Output: 5

Wszystkie te trzy są równoważne, i o wciąż nie jest tablicą.


0 dla odpowiedzi nr 2

BaseActor i Actor to metody dołączone do obiektu Game. The to wewnątrz aktora nic oprócz odwołania do instancji obiektu. Dlatego za każdym razem, gdy obiekt gry zostanie utworzony, będą do niego dołączone metody BaseActor i Actor. Na przykład

var obj = new Game();

temu return this.$.actorTypes[id] = new this.BaseActor(rate); wewnątrz aktora ustawi wartość „id” wewnątrz obiektu tablicy actorTypes na instancję obiektu BaseActor, a zatem składającą się ze wszystkich właściwości tej klasy.


0 dla odpowiedzi № 3

Tablice i obiekty w JavaScript są bardzo podobne. Możesz użyć for( var i in object ) do zapętlania elementów obiektu, tak jak za pomocą pętli for( var i = 0; i < array.length; i++ ). Podobnie możesz użyć dostępu do tablicy dla obiektu: object.property jest taki sam jak object["property"].