• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Publiczna metoda dołączona do prototypu obiektu, która zwraca jego prywatne atrybuty

Object Storage Arubacloud
0 głosów
212 wizyt
pytanie zadane 14 lutego 2016 w JavaScript przez ScriptyChris Mędrzec (190,190 p.)

Tworzę konstruktor, w którym umieszczam metody wyrzucające prywatne zmienne do obiektów:

    function Customer(name, ownPin)
    {
        var ownerName = name,
            ownerPin = ownPin;

        this.getOwnerName = function()
        {
            console.log('Owner name is: ', ownerName);
        };

        this.getOwnerPinCode = function()
        {
            console.log('Owner PIN code is: ', ownerPin);
        }
    }

    var owner = new Customer('tester', 1234);
    owner.getOwnerName();
    owner.getOwnerPinCode();

Jest ok, z tym że gdy chcę przesunąć te dwie metody (getOwnerName() i getOwnerPinCode()) z samego konstruktora do łańcucha (wykorzystać dziedziczenie prototypowe) tworzonych obiektów, to nie wiem jak to uczynić.

    Customer.prototype.getOwnerPinCode = function()
    {
        return this.ownerPin;
    };

Gdy powyższy kod umieszczę pod konstruktorem, to ani this.ownerPin, ani ownerPin nie są widoczne (są undefined) - co jest w sumie logiczne. Zatem w jaki sposób uzyskać dostęp do tych zmiennych? Metody .call/.bind?

Chodzi mi o to, aby konstruktor obiektu tworzył tylko jego atrybuty, zaś same funkcje (aby oszczędzać pamięć - taki jest chyba tego cel) były doczepione do prototypu. Wtedy wszystkie funkcje będą miały dostęp do prywatnych atrybutów tych obiektów, zaś same funkcje nie będą tworzone wielokrotnie.

1 odpowiedź

+1 głos
odpowiedź 14 lutego 2016 przez Comandeer Guru (601,110 p.)
wybrane 14 lutego 2016 przez ScriptyChris
 
Najlepsza
W takim wypadku nie da się tego zrobić. Musiałbyś skorzystać z closure i patternu factory… ale to raczej przerost formy nad treścią.
komentarz 14 lutego 2016 przez Comandeer Guru (601,110 p.)
Ale wiesz, że w przeglądarce jest baza danych? ;) IndexedDB.
komentarz 14 lutego 2016 przez ScriptyChris Mędrzec (190,190 p.)
Nie wiedziałem. Myślałem, że HTML5 Web Storage, Cache i Cookies to wszystko, z czego przeglądarka może korzystać do przechowania danych (tzn. te 3 terminy kojarzę, ale jeszcze nie wdrażałem się w ich możliwości i zastosowania) :)

Czyli obiektów nie można tworzyć dynamicznie i zamiast tego (by nie robić pełnoprawnej bazy danych), można prowizorycznie wspomóc się bazą przeglądarki?
komentarz 14 lutego 2016 przez Comandeer Guru (601,110 p.)

Da się, bo właśnie taki obiekt będziesz sobie do tej bazy zapisywał (w sumie można też przejechać to JSON.stringify i wsadzić do localStorage).

komentarz 14 lutego 2016 przez ScriptyChris Mędrzec (190,190 p.)
Ok, to co miałeś na myśli mówiąc, że JS nie tworzy sam obiektów? Ja pytałem własnie o dynamiczne tworzenie obiektów (wg "schematu", który jest zapisany w konstruktorze) na podstawie danych, które poda użytkownik. :)
komentarz 14 lutego 2016 przez Comandeer Guru (601,110 p.)

Myślałem, że chodziło Ci o to, że JS dla każdego input tworzy obiekt ;)

Podobne pytania

0 głosów
1 odpowiedź 152 wizyt
pytanie zadane 10 kwietnia 2020 w JavaScript przez maslokeeper01 Użytkownik (620 p.)
0 głosów
1 odpowiedź 242 wizyt
+1 głos
0 odpowiedzi 312 wizyt

92,566 zapytań

141,420 odpowiedzi

319,614 komentarzy

61,952 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...