Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript] Funkcja w obiekcie
Fred1485
post 26.09.2015, 14:13:34
Post #1





Grupa: Zarejestrowani
Postów: 361
Pomógł: 22
Dołączył: 10.02.2015

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


Kurde sprawa jest pewnie banalnie prosta ale dziś nie myślę, mam:

  1. var data = {
  2. validateInputData: function(input) {
  3. //
  4. },
  5. submit: function(e) {
  6. e.preventDefault();
  7. this.validateInputData(this.parentNode.surname.value);
  8. }
  9. }
  10. submit.onclick = submit;


Pewnie część z was juz kojarzy o co chodzi, najpierw chcę wywołać this.validate... w kontekście całego obiektu, ale parametr chcę przekazać w kontekscie elementu, gdzie this to jest oczywiście kliknięty input typu submit. JS nie poradzi sobie z takim czymś? sad.gif

-----EDIT----

Sprawa oczywiście była prosta, w obiekcie trzeba tylko użyć data.validate... zamiast this.

Ten post edytował Fred1485 26.09.2015, 16:20:55


--------------------
  1. echo 'I was trying';
  2. die ();
Go to the top of the page
+Quote Post
Comandeer
post 26.09.2015, 20:52:23
Post #2





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

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


Poczytaj se o Function.prototype.bind.


--------------------
Go to the top of the page
+Quote Post
Fred1485
post 27.09.2015, 11:11:50
Post #3





Grupa: Zarejestrowani
Postów: 361
Pomógł: 22
Dołączył: 10.02.2015

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


Hmm, no tak teraz jak to rozumieć.. Wiem jak działa bind, natomiast dlaczego będzie ona lepsza niż obecny sposób (chociaż też mi się wydaję że we wnętrzu obiektu zawsze poprzez this się odwołujemy ale jednak po nazwie obiektu działa).

Jeszcze w praniu druga ciekawa rzecz wyszła,

  1. var c = {
  2. a: "aaa",
  3. "b": "bbb"
  4. }


Czym w samej rzeczy różni się zapis z cudzysłowiem, bo działanie jest takie same...

Ten post edytował Fred1485 27.09.2015, 11:12:18


--------------------
  1. echo 'I was trying';
  2. die ();
Go to the top of the page
+Quote Post
Comandeer
post 27.09.2015, 11:38:32
Post #4





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

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


Cytat
Wiem jak działa bind, natomiast dlaczego będzie ona lepsza niż obecny sposób

Osobiście bym wolał w zdarzeniu mieć w this obiekt, którego metodę wywołuję, a element i zdarzenie przekazać jako parametry.

Cytat
Czym w samej rzeczy różni się zapis z cudzysłowiem, bo działanie jest takie same...

Kod
var a = {
    'niepoprawny-identyfikator-który-bez-apostrofów/cudzysłowów-walnąłby-błędem': 'wartość'
}

Pomijam już fakt, że JSON wymaga cudzysłowów (i tylko cudzysłowów - apostrofy nie przejdą!) zawsze.


--------------------
Go to the top of the page
+Quote Post
Fred1485
post 27.09.2015, 12:03:09
Post #5





Grupa: Zarejestrowani
Postów: 361
Pomógł: 22
Dołączył: 10.02.2015

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


Haha to właśnie śmieszne bo dlatego użyłem cudzysłowów, żeby móc od liczby zacząć tongue.gif

A co do this to nie do końca "czaję" o co ci biega, bo mogę w sumie ten button po kliknięciu przekazać jako parametr, ale i tak używając this "złapie" buttona.

  1.  
  2. var p = {
  3. a: function() {
  4. this.b();
  5. },
  6. b: function(){alert(this.value)}
  7. }
  8.  
  9. var button = document.blablabla;
  10. button.onclick = p.a;
  11.  
  12.  


Tutaj oczywiście wywali undefined ale przecież ty to wiesz dlaczego, to nie tłumaczę biggrin.gif
Mi chodzi tylko o to, żeby z wewnątrz obiektu móc poprzez this wywołać funkcję b. Jak button dam np do parametru funkcji to nie widzę sposobu żeby ruszyło.


--------------------
  1. echo 'I was trying';
  2. die ();
Go to the top of the page
+Quote Post
Comandeer
post 27.09.2015, 12:18:09
Post #6





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

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


http://jsfiddle.net/Comandeer/cc5qs9h3/ → coś takiego bym widział. AFAIR ta technika nazywa się currying


--------------------
Go to the top of the page
+Quote Post
Fred1485
post 27.09.2015, 12:38:27
Post #7





Grupa: Zarejestrowani
Postów: 361
Pomógł: 22
Dołączył: 10.02.2015

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


No ok ale teraz popatrz że zamiast zastępować to wszystko twoim pomysłem mógłbym użyć samo data.funkcja i efekt taki sam. Juz nie wiem czy warto to przekształcić smile.gif


--------------------
  1. echo 'I was trying';
  2. die ();
Go to the top of the page
+Quote Post
Comandeer
post 27.09.2015, 13:04:21
Post #8





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

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


No można wink.gif Pod warunkiem, że wiadomo, że ten obiekt będzie się zawsze nazywał data, a nie jest np tworzony przez konstruktor.


--------------------
Go to the top of the page
+Quote Post
Fred1485
post 27.09.2015, 13:06:36
Post #9





Grupa: Zarejestrowani
Postów: 361
Pomógł: 22
Dołączył: 10.02.2015

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


Nie, to bardzo prosty skrypcik do szkoły i tylko to mi w głowie siedziało czy dobrze robię, żeby nie było się do czego doczepić biggrin.gif dzięki wielkie znów wiele rzeczy wyjaśniłeś wink.gif
Albo jak jeszcze tutaj zerkniesz to wykorzystam cię jeszcze do jednej rzeczy. Chodzi mi o wydajność, w inpucie muszę zrobić że pierwsza litera musi być duża, więc dynamicznie to przy wpisywaniu czy wklejaniu zrobić. Z tym żadnego problemu nie ma, tylko w kwestii formalnej czy w kwestii wydajności lepiej przy zdarzeniu sprawdzać czy pierwsza litera jest mała, a jeśli tak to zamienić na dużą, czy bez sprawdzania zawsze zamieniać na dużą. Wiadomo, że jeśli będzie duża to nic nie zmieni, ale czy bez sprawdzania będzie to lepiej zoptymalizowane to nie mam pojęcia.

Ten post edytował Fred1485 27.09.2015, 13:11:56


--------------------
  1. echo 'I was trying';
  2. die ();
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 09:54