Wpis z mikrobloga

Jak mogę się odwołać w obiekcie do funkcji tego obiektu? Mam metody votes.men, votes.women które zwracają ilość elementów w poszczególnych tablicach. Chcę też dodać votes.total która zwróci sumę votes.men, votes.women, ale coś nie działa.

var data = {
votes: {
total: function() {
return this.votes.men + this.votes.women;
},
men: function() {
return this.voters.men.length;
},
women: function() {
return this.voters.women.length;
}
}

data.votes.total zwraca następujący tekst:
function () { return this.voters.men.length; }function () { return this.voters.women.length; }

Działa, kiedy zawartość metody total ustawię na:
return this.voters.men.length + this.voters.women.length + this.voters.unknown.length;
czyli zawartość tych pomnijeszych metod, ale czy to jesyne rozwiązanie?

#javascript
  • 15
@Matt23: this.votes.men zwraca sam "obiekt" funkcji (w js funkcja jest obiektem typu Function) a Ciebie interesuje rezultat tej funkcji więc musisz ją wywołać dodając "()" na końcu.
@Matt23: ok, wywołujesz "this.voters" wewnątrz obiektu "votes" a więc na tym obiekcie. Ten obiekt nie posiada property "voters" gdyż property to jest częścią obiektu "data" w którym zagnieżdzony jest obiekt "votes". Jeśli chcesz żeby to zadziałało w postaci takiej jak jest (oczywiście z odkomentowaną linijką) musisz przenieść "voters" do wewnątrz "votes".
@kszych: Zaraz, jeśli odkomentuję 5. linię to z obiektu votes wywoluję this.voters w metodzie total i wszystko działa. Tak samo wywołuję this.voters w metodzie votes.men i działa.
Dlaczego więc gdy korzystam z linii 6. nie mogę odwołać się w obiekcie votes do metod w tym samym obiekcie, to jest this.votes.men itd?
@kszych: #!$%@?, jakim cudem u Ciebie działa a u mnie nie?
Poza tym, w metodzie votes.men dałem console.log(this); i zwracany jest cały obiekt data. Zgodnie z tym co mówisz powinien zostać zwrócony obiekt votes. A tak nie jest. Zresztą konsola rzuca że this.men() is not a function, więc już nic nie rozumiem.