-
Path: news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!.P
OSTED!not-for-mail
From: Marek S <p...@s...com>
Newsgroups: pl.comp.www
Subject: Co się stało z programowaniem obiektowym w JS?
Date: Sat, 20 Jan 2018 16:34:18 +0100
Organization: ATMAN - ATM S.A.
Lines: 77
Message-ID: <p3vnhr$pd1$1@node1.news.atman.pl>
NNTP-Posting-Host: 89-69-207-111.dynamic.chello.pl
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
X-Trace: node1.news.atman.pl 1516462459 26017 89.69.207.111 (20 Jan 2018 15:34:19
GMT)
X-Complaints-To: u...@a...pl
NNTP-Posting-Date: Sat, 20 Jan 2018 15:34:19 +0000 (UTC)
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101
Thunderbird/52.5.2
X-Mozilla-News-Host: news://news.atman.pl:119
Content-Language: pl
Xref: news-archive.icm.edu.pl pl.comp.www:403398
[ ukryj nagłówki ]Witam,
Kiedyś zrobiłem spory projekt w JS, który jakiś czas temu przestał
działać. Postanowiłem przyjrzeć się sprawie. Okazało się, że styl
programowania "obiektowego" jaki używałem przestał działać. Przykład
poniżej.
Funkcje prywatne (f1, f2) kiedyś definiowało się wewnątrz innej funkcji.
Funkcje mogły się wzajemnie wywoływać zachowując kontekst obiektu
(testClass). Wszystko pięknie działało lata ... i przestało nagle
(sprawdzałem Edge, Firefox).
W poniższym przykładzie kliknięcie przycisków "test" i "test2" powoduje,
że zadziałają funkcje odpowiednio f1 (prywatna) i f3 (publiczna).
Natomiast wywołanie z ich poziomu innej funkcji prywatnej (f2) powoduje,
że traci ona kontekst obiektu (testClass). Jej operator this wskazuje na
obiekt Window!!! Funkcja f2 traktowana jest tak jakby była poza klasą
testClass. Mało tego, analizując inny przypadek, this stał się nawet
"undefined". Zawsze chodzi o to samo: wywołanie jakiejś prywatnej
funkcji w obiekcie z poziomu innej - przestało być możliwe z zachowanie
kontekstu.
Przykład zacznie działać gdy zamiast wywoływać f2(), wywołam
f2.bind(this)().
Co się stało, że powszechnie stosowane metody nagle padły? Czy da się to
jakoś przywrócić do życia bez przerabiania tysięcy linii kodu?
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<script>
var tc;
function testClass()
{
function f2()
{
console.log("f2",this===tc);
}
function f1()
{
console.log("f1",this===tc);
f2();
}
this.f3=function()
{
console.log("f3",this===tc);
f2();
}
document.getElementById("test").addEventListener("cl
ick",f1.bind(this))
}
function init()
{
tc=new testClass();
}
window.addEventListener("load",init);
</script>
</head>
<body>
<button type="button" id="test">test</button>
<button type="button" onClick="tc.f3()">test 2</button>
</body>
</html>
--
Pozdrawiam,
Marek
Następne wpisy z tego wątku
- 20.01.18 21:36 Marek S
Najnowsze wątki z tej grupy
- UWAGA: MAM PODEJRZENIE, ŻE onet.pl DOKONUJE ATAKÓW!!!
- Komisja sejmowa odrzuca petycję ws. obowiązkowych kanałów RSS na stronach podmiotów publicznych
- kol. sukces po polsku: "Samurai Labs. Technologia do zapobiegania samobójstwom"
- Wściekli obywatele spalili budynek parlamentu Nepalu [bo odcięli im amerykańskie serwery społecznościowe - przyp. JMJ]
- UWAGA: MAM PODEJRZENIE, ŻE trojmiasto.pl DOKONUJE ATAKÓW
- Cenzura na wolnemedia.net - likwidacja codziennej sekcji "Sygnały zauważone"
- Nowe style na energokod.pl
- Jak działa hosting w którym wykupuje się sam serwer i domenę, bez IP?
- Perfidne ataki krakerów z KRLD na skrypciarzy JS i Pajton
- Do sądu trafił pozew zbiorowy przeciw Google'owi - oskarżenie o praktyki monopolistyczne na rynku reklamy internetowej
- Jakie znacie działające serwery grup dyskusyjnych?
- is it live this group at news.icm.edu.pl
- php, linki z nazwami a $_GET, SEO
- www polityka pl captcha
- dyktatura brudnego palucha
Najnowsze wątki
- 2025-09-19 Czeladź => Specjalista ds. public relations <=
- 2025-09-19 Warszawa => International Freight Forwarder <=
- 2025-09-19 Warszawa => DevOps Engineer <=
- 2025-09-19 zasieg radaru
- 2025-09-19 JAK nie formułować sprzeciwów w kwestii Strefy w Gazie [Niemcy: Hasło rodem z III Rzeszy]
- 2025-09-19 Zmywarka Bosch SRV55T43EU - awaria
- 2025-09-18 Kuczyński twierdzi że WIBOR nie jest do ruszenia w sądach
- 2025-09-18 Warszawa => Senior Account Manager <=
- 2025-09-18 Warszawa => OSS System Administrator <=
- 2025-09-18 Kraków => Koordynator Produkcji / Przedstawiciel ds. rozwoju produktu
- 2025-09-18 Ostrów Wielkopolski => Specjalista ds. Marketingu Online (PPC) <=
- 2025-09-18 pierwszy tel kupiłem za 1250zł
- 2025-09-17 jak się kupuje elektryczny?
- 2025-09-17 Kod zniżkowy w TME do 26.09.2025
- 2025-09-17 Ukraińcy uważają polski sys. antydronowy za najlepszy na Świecie, a rząd w III Rzeczy (pospolitej) woli sys. niemiecki