Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript] Funkcja w obiekcie
Forum PHP.pl > Forum > Przedszkole
Fred1485
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.
Comandeer
Poczytaj se o Function.prototype.bind.
Fred1485
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...
Comandeer
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.
Fred1485
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.
Comandeer
http://jsfiddle.net/Comandeer/cc5qs9h3/ → coś takiego bym widział. AFAIR ta technika nazywa się currying
Fred1485
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
Comandeer
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.
Fred1485
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.