ferrante.pl

  • blog
  • nauka, kurs javascript, kurs jquery
  • o mnie

Ile tu jest błędów?

  • JavaScript
data publikacji:

10/09

liczba komentarzy:
8

Właśnie, jak w temacie. Pomyślałem, że niezłym pomysłem będzie po prostu wrzucenie kodu i pytanie do Was, co tutaj jest źle? Ten, kto wymieni najwięcej błędów (najlepiej w komentarzach) i odpowiednio wyjaśni każdy z nich zgarnia główną nagrodę jakimi są prestiż i uznanie tutejszych Czytelniczek i Czytelników. Jest o co walczyć, prawda? Po jakimś czasie opublikuję rozwiązanie zagadki.

var foobar = {
	property: Infinity,
	enum = {
		10th: "ten",
		20th: "twenty"
	},
	toString: (function() {
		return (NaN || foobar).toString();
	})(),
	copy: false && this.alert,
	clone: function() {
		this.__proto__ = foobar;
	},
};

var obj = new foobar().clone();

Komentarze

  1. 1

    tak na szybko od góry:
    - Infinity – nie ma takiej zmiennej
    - po enum jest znak = a powinno być :
    - właściwości enum zaczynają się od cyfr
    - toString – wywali błąd zbyt wielu referencji
    - this.alert – nie ma tekiej właściwości
    - przecinek po clone
    - foobar nie jest konstruktorem tylko gotowym obiektem (new foobar)
    - no i kod jest bez sensu :)

    blisko jestem?
    pozdrawiam

    autor komentarza:
    pio
    data komentarza:
    10/09/2009 @ 22:42
  2. 2

    no nawet, nawet, ale da sie cos wycisnac jeszcze ;-)

    autor komentarza:
    ferrante
    data komentarza:
    10/09/2009 @ 22:49
  3. 3

    Generalnie jednak uznajmy, ze 1. odpowiedz sie liczy ;-)

    autor komentarza:
    ferrante
    data komentarza:
    10/09/2009 @ 22:53
  4. 4

    Błędy generalnie takie jak wymienił pio (enum=, właściwości zaczynające się od cyfr), ale nie do końca:
    • Infinity to stała, oznacza… Infinity. Tu nie ma błędu.
    • toString faktycznie jest bez sensu, ale zdaje mi się, że błąd będzie polegał na tym, że .toString będzie wywołane na undefined (bo foobar jeszcze nie jest zdefiniowany w momencie stworzenia lambdy). Ciężkie, mogę się mylić.
    • this.alert się nie wykona ze względu na “false &&”. Poza tym… nie wiadomo czy nie ma takiej właściwości w kontekście definiowania tej zmiennej (foobar). A nuż jest? „this” tutaj nie odwołuje się do foobar.
    • czy __proto__ to nie jest przypadkiem specjalność tylko Firefoksa?
    • Nie powinno być przecinka przed klamrą zamykającą (po clone).
    • foobar nie jest funkcją, wywołanie foobar() jest bez sensu. Co innego new foobar.clone() — ta funkcja jest konstruktorem. ;-)

    autor komentarza:
    mcv
    data komentarza:
    11/09/2009 @ 00:55
  5. 5

    Jeszcze gwoli ścisłości: Infinity to może nie tyle stała co po prostu wartość. Literał. Tak jak liczba, np. 5. ;-) Szczegóły.

    autor komentarza:
    mcv
    data komentarza:
    11/09/2009 @ 00:56
  6. 6

    no i jeszcze np.:
    - enum jest reserved,
    - wywołujesz natychmiastowo toString zamiast tworzyć metodę o tej nazwie,
    - false && … ? NaN || … ? ;D
    - copy pewnie powinno być fkcją
    - czy clone nie powinno czegoś zwracać?

    autor komentarza:
    wildcard
    data komentarza:
    15/09/2009 @ 14:13
  7. 7

    01. OK
    02. OK
    03. Jest ‘=’, powinno być ‘:’.
    04. Nieprawidłowa nazwa właściwości.
    05. Nieprawidłowa nazwa Właściwości.
    06. OK
    07. OK
    08. undefined nie jest obiektem i tym samym nie może mieć zaimplementowanej metody toString. undefined to oczywiście wynik wyrażenia logicznego znajdującego się w tej linii, ponieważ foobar nie zostanie zainicjalizowany zanim nie skończy się jego definicja, a ta nie jest zakończona, gdyż owa anonimowa funkcja wykona się natychmiast.
    09. OK
    10. OK
    11. OK
    12. ‘foobar’ na tym etapie jest jeszcze niezdefiniowany
    13. Formalnie nie jest to błąd, niemniej IE<8 się na tym wywali na pewno i coś mi w głowie świta, że IE8 zachował w tym względzie kompatybilność wstecz, tj. też się wywali.
    14. OK
    15. OK
    16. 'foobar' nie jest funkcją, niemniej gdyby użyć 'new foobar.clone()' to o ile się nie mylę dostalibyśmy z powrotem obiekt "klasy" (celowo używam cudzysłowów, gdyż jak wiadomo tych w JS de facto nie ma) 'foobar'.

    autor komentarza:
    Kamil T.
    data komentarza:
    09/11/2009 @ 22:56
  8. 8

    [...] false to szybko kończymy zabawę i copy przyjmuje wartość false właśnie. Warto wyróżnić komentarz mcv: this.alert się nie wykona ze względu na “false &&”. Poza tym… nie wiadomo czy [...]

    autor komentarza:
    Ile tu jest błędów – rozwiązanie
    data komentarza:
    26/11/2009 @ 01:00

Dodaj komentarz

idź do góry
  • blog
  • nauka, kurs javascript, kurs jquery
  • o mnie
O mnie

Damian Wielgosik - Programista i dziennikarz. Od siedmiu lat koder front-end i back-end. Lubi dobre technologie. mail skype

Kategorie
  • CSS
  • Drawter
  • ferrante.pl
  • JavaScript
  • jQuery
  • PHP
  • Publicystyka
  • Rozmowy rolowane
  • Software
  • Usability
  • Vademecum
  • W sieci...
Czytam
  • Costa
  • Ludwik
  • Rafał Kukawski
  • RAFi
  • Szafranek
  • Warszawa78

Powered by Wordpress.
Copyright by Damian Wielgosik 2007-2010
Design by Dez.