-
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
- 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
- www.znanylekarz.pl
- Czy pytanie o sczytywanie stron programami/skryptami to tu?
- Grupy webdevowe
- Jak wydrukować stronę?
- IIS, kilka witryn
- linki <a href="/strona.php"> (ze slashami)
- co rozszerza stronę??
- responsywny akapit <p>
Najnowsze wątki
- 2025-05-23 Gdańsk => Programista Delphi <=
- 2025-05-23 Warszawa => Senior Key Account Manager IT <=
- 2025-05-23 Zielonka => Key Account Manager IT <=
- 2025-05-23 Poznań => Konsultant wdrożeniowy Comarch XL (Logistyka, WMS, Produkc
- 2025-05-23 Elektrozawór do tlenu
- 2025-05-23 Białystok => NMS System Administrator <=
- 2025-05-23 Warszawa => Cloud Engineer (Azure) <=
- 2025-05-23 Warszawa => Inżynier cloud (Azure) <=
- 2025-05-23 Warszawa => Programista Full Stack .Net <=
- 2025-05-23 Warszawa => Software .Net Developer <=
- 2025-05-23 Łódź => Programista Mainframe (z/OS, Assembler) <=
- 2025-05-23 Warszawa => Starszy Programista C <=
- 2025-05-23 Polskie Obserwatorium Bezpiecze?stwa Ruchu Drogowego (POBR) mapa wypadk??w
- 2025-05-23 Warszawa => Team Lead Data Engineer (obszar Snowflake) <=
- 2025-05-23 Warszawa => International Freight Forwarder <=