Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Dodanie obiektu do obiektu poprzez prototype.
adbacz
post
Post #1





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

Ostrzeżenie: (0%)
-----


Niezbyt wiem jak to sie dokładnie nazywa, ale chodzi mi o poniższy kod.

[JAVASCRIPT] pobierz, plaintext
  1. var Main = function(data) {
  2. this.someData = data;
  3.  
  4. this.doSomethig = function() {
  5. var subObj = new Main.SubObject;
  6. };
  7. };
  8.  
  9. Main.prototype.SubObject = function() {
  10. this.someMethod = function() {
  11.  
  12. }
  13. };
  14.  
  15. // Wywołanie
  16. var app = new Main({ /* data */ });
  17. app.doSomethig();
[JAVASCRIPT] pobierz, plaintext


Niestety, w ostatniej linijce powyższego kodu wykrzacza mi się i pisze, że SubObject jest undefined. Mam nadzięję, że rozumiecie o co mi chodzi - jak to osiągnąć?

Ten post edytował adbacz 10.05.2015, 17:34:19
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Comandeer
post
Post #2





Grupa: Zarejestrowani
Postów: 1 268
Pomógł: 254
Dołączył: 11.06.2009
Skąd: Świętochłowice

Ostrzeżenie: (0%)
-----


Należy rozróżnić w JS własności statyczne "klasy" od własności poszczególnych instancji. W Twoim kodzie konieczne jest zastosowanie dziwacznej konstrukcji z nawiasami, ponieważ SubObject umieściłeś w prototypie Main. Tym samym SubObject staje się dostępny jedynie z poziomu konkretnych instancji "klasy" Main.

To, co chcesz uzyskać, jest możliwe do osiągnięcia w JS dzięki temu, że w tym języku wszystko jest obiektem - w tym funkcje. Tym sposobem można zadeklarować SubObject jako metodą statyczną:
Kod
Main.SubObject = function()
{

}

Wówczas bez problemu można to wywołać jako
Kod
var sub = new Main.SubObject();

Ot, takie public static w JS (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.10.2025 - 05:20