Ta strona używa ciasteczek (cookies), dzięki którym nasz serwis może działać lepiej. Dowiedz się więcej OK, rozumiem

JavaScript - zasięg zmiennych, obiektowość

Tworzenie dynamicznych stron internetowych z zastosowaniem JavaScript, jQuery, Ajax. Dowiedz się jak to zrobić, znajdź rozwiązania swoich problemów.

JavaScript - zasięg zmiennych, obiektowość

Post 08.01.2017, 17:48:09

Cześć

Miałbym kilka pytań dotyczących tego języka.
Pierwsze - zasięg zmiennych i ich nadpisanie.
Załóżmy że mam pętle for i w niej kod odpowiedzialny za zapytanie AJAXowe.
Z tego co wiem to taka pętla przeleci i wyśle trzy żądania które potem będą się ładować, czekać na odpowiedź od serwera. I moje pytanie brzmi, czy jeśli przed pętla zadeklaruje jakąś zmienna np var test;
A potem w jquery AJAX będę odwoływać się do tej zmiennej, za każdym razem zmieniając jej wartość, to czy jest możliwe żeby np zapytanie drugie otrzymało wartość zmiennej od zapytania piątego?

Drugie pytanie dotyczy obiektowosci w JS. w językach np PHP ciągle trabi się o tym żeby pisać obiektowo, że strukturalne programowanie przeszło 'do lamusa'. A jak to jest z tym w przypadku js? Czasami przeglądam źródła niektórych stron i prawdę mówiąc to rzadko albo wcale nie widzę tam obiektowym aspektów javascriptu, tzn klas itp. Jak to z tym jest?
Gnopi
Posty: 2
Dołączył(a): 08.01.2017

Re: JavaScript - zasięg zmiennych, obiektowość

Post 08.01.2017, 18:10:21

Witam,
co do pierwszego pytania to proponuję, abyś zamieścił konkretny kod o który pytasz to pomożemy Ci dla konkretnego przypadku określić zasięg zmiennych i przeanalizujemy kolejne iteracje pętli.

Co do obiektowości w JS to nie możesz tego w ten sposób porównywać do PHP. W JS w zasadzie wszystko jest obiektem. W PHP masz różne funkcje, którym przekazujesz np. wartości określonego typu jak string, int itp. w zależności od tego do czego dana funkcja służy.

W JS, jeśli chcemy stosować słownictwo typowo obiektowe, powinno się raczej mówić, że zawsze stosujesz metody róznych obiektów. Na przykład nie ma samodzielnej funkcji wyszukującej jakiś ciąg 'stringB' wewnątrz ciągu 'stringA'. Każda zmienna jest jednocześnie obiektem, a więc jeśli mamy dwie zmienne:

Kod: Zaznacz cały
var a = 'c', //wartość szukana
b = 'cbacbacacbssddgfdgs'; //ciąg do przeszukania


to tak na prawdę tworzymy dwa obiekty, których konstruktorem jest String, a które dziedziczą po obiekcie Object oraz String różne metody, m.in. metodę indexOf. Wiedząc o tym, wspomniane wcześniej wyszukanie zrobisz wywołując metodę indexOf na obiekcie b, czyli zmiennej, zawierającej 'ciag do przeszukania:
Kod: Zaznacz cały
if (~b.indexOf(a)) { // zrób coś, gdy w ciągu b znaleziono podciąg a}


W ECMAScript 6 zaczęto powoli wprowadzać możliwość deklarowania metod w sposób bardziej zbliżony do obiektowości PHP (np. istnieje już 'class') ale raczej uważaj z tak bezpośrednim porównaniem, gdyż w JS chociażby kwestia dziedziczenia wygląda zupełnie inaczej. Ja osobiście nie lubię usilnego tworzenia klas itp. w JS i uważam, że warto dobrze poznać zasady dziedziczenia prototypowego co daje bardzo duże możliwości i dużą elastyczność.
drogimex
Tomek Sochacki

Posty: 6
Dołączył(a): 08.01.2017
Lokalizacja: Poznań

Re: JavaScript - zasięg zmiennych, obiektowość

Post 10.01.2017, 10:18:17

Nie mam jakiegoś konkretnego kodu, może być np

Kod: Zaznacz cały
var k;
for(var i=0; i<10; i++)
{
  $.get( "ajax/test.html", function( data ) {
   k=data+'coś';
  $('#id'+i).append(k)
});
}


Tak więc czy jest opcja zeby w jakimś polu do którego wrzucam wartość k została nadpisana zła wartość, ta która powinna trafić do innego pola?
Gnopi
Posty: 2
Dołączył(a): 08.01.2017


Powrót do JavaScript


 


  • Podobne wątki
    Odpowiedzi
    Wyświetlone
    Ostatni post

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 4 gości

Hosting, Domeny, SSL
iCash

Subskrypcja

Mamy 50053 zarejestrowanych użytkowników.
Najnowszy użytkownik: RodmanFeta


Nasi użytkownicy napisali:

  • 934680 wiadomości
  • w 246209 tematach

Najnowsze wpisy na blogu

Najnowsze artykuły

Najaktywniejsi (ostatnie 30 dni)