Skip to content

Commit 20dd477

Browse files
From ProgrammerZamanNow
0 parents  commit 20dd477

29 files changed

+1316
-0
lines changed

.vscode/launch.json

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
{
2+
// Use IntelliSense to learn about possible attributes.
3+
// Hover to view descriptions of existing attributes.
4+
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5+
"version": "0.2.0",
6+
"configurations": [
7+
{
8+
"type": "chrome",
9+
"request": "launch",
10+
"name": "Open 27-iterable-iterator.html",
11+
"file": "c:\\Users\\useer\\Documents\\javascript\\javascript-oop\\27-iterable-iterator.html"
12+
}
13+
]
14+
}

00-oop.txt

+308
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,308 @@
1+
AGENDA
2+
-> Pengenalan Object Oriented Progrmamming
3+
-> Class
4+
-> Object
5+
-> Inheritance
6+
-> Iterable dan Iterators
7+
-> Standard JavaScript Classes
8+
-> Dan lain-lain
9+
10+
JavaScript Object Oriented Progrmamming
11+
=> Sudut pandang bahasa pemrogramman yang berkonsep "Objek" & "Class"
12+
13+
Object
14+
=> Data yang berisi field / properties / attributes dan method / function / behavior
15+
16+
Class
17+
=> Blueprint, prototype / cetakan untuk membuat Object
18+
=> Berisikan deklarasi semua properties dan function yang dimiliki oleh Object
19+
=> Setiap Object selalu dibuat dari Class
20+
=> Dan sebuah Class membuat Object tanpa batas
21+
22+
OOP di JavaScript
23+
=> JavaScript sendiri sebenarnya sejak awal dibuat sebagai bahasa prosedural
24+
=> Implementasi OOP di JavaScript memang tidak sedetail bahasa pemrogramman lain
25+
yang memang dari awal merupakan bahasa pemrogramman OOP seperti Java atau C++
26+
27+
Membuat Object
28+
=> Membuat variable dengan tipe data Object
29+
=> Pembuatan Object menggunakan tipe data Object, akan membuat object yang selalu unik
30+
namun OOP : Biasanya membuat Class sebagai cetakan,
31+
sehingga bisa membuat object dengan karakteristik yang sama berkali-kali
32+
tanpa harus mendeklarasikan object berkali-kali
33+
seperti menggunakan tipe data object
34+
35+
Membuat Constructor function
36+
=> EcmaScript versi 6, pembuatan class biasanya menggunakan function.
37+
=> JavaScript bukanlah bahasa pemrogramman yang fokus ke OOP
38+
=> Untuk membuat class di JavaScript lama,
39+
kita bisa membuat function
40+
41+
Membuat Object dari Constructor function
42+
=> Menggunakan kata kunci new, lalu diikuti dengan Constructor functionya.
43+
44+
Property di Constructor function
45+
=> Sebenarnya setalah membuat object bisa dengan mudah menambahkan property ke dalam object tersebut
46+
hanya dengan menggunakan variable nya,
47+
diikuti tanda titik dan nama property
48+
=> Namun jika seperti itu, alhasil constructor function yang sudah kita buat terlalu berguna
49+
=> Untuk menambahkan property di dalam semua object yang dibuat constructor function,
50+
kita bisa menggunakan kata kunci 'this' lalu diikuti dengan nama 'property' nya
51+
52+
Method di Constructor Function
53+
=> Sama seperti pada tipe data object biasanya,
54+
dapat menambahkan method di dalam constructor function
55+
=> Jika kita tambahkan method di constructor function,
56+
secara otomatis object yang dibuat akan memiliki method tersebut
57+
58+
Parameter di Constructor Function
59+
=> Karena dalam JavaScript, class adalah berbentuk function,
60+
jadi secara default function tersebut bisa memiliki Parameter
61+
=> Constructor function sama seperti function biasanya,
62+
bisa memiliki parameter,
63+
hal ini membuat ketika kita membuat object,
64+
kita bisa mengirim langsung data lewat parameter
65+
di constructor function tersebut
66+
67+
Constructor Inheritance
68+
=> Dalam constructor kita biasanya membuat property
69+
baik itu berisi vaule ataupun function
70+
=> Dapat memanggil constructor lain,
71+
dengan begitu bisa mewarisi semua property yang dibuat di constructor lain
72+
=> Untuk memanggil constructor lain,
73+
bisa menggunaan NamaConstructor.call(this, parameter)
74+
75+
Prototype
76+
=> JavaScript sebelumnya dikenal dengan pemrogramman berbasis prototype
77+
78+
Prototype Inheritance
79+
=> Saat membuat object dari constructor function,
80+
object tersebut disebut instance (object),
81+
semua property (value dan method) akan berada di dalam instance object nya
82+
=> Setiap membuat sebuah constructor function,
83+
maka secara otomatis akan dibuatkan prototype nya,
84+
seperti membuat constructor Person,
85+
maka akan ada Person.prototype
86+
=> Saat membuat sebuah object instance, secara otomatis
87+
object tersebut adalah turunan dari Constructor.prototype nya
88+
=> Untuk mengakses prototype, pilih sebuah instance (object)
89+
bisa menggunaan _proto_
90+
=> Prototype selalu memiliki parent, artinya dia adalah turunan,
91+
parent tertinggi adalah Object prototype
92+
=> Pertanyaanya bagaimana jika ingin melakukan inheritance ke prototype lain ?
93+
Hal ini juga nbisa dilakukan, namun agak sedikit tricky,
94+
karena hal ini, sebenarnya untuk JavaScript modern,
95+
tidak direkomendasikan lagi praktek OOP menggunaan Prototype,
96+
karena ES6 (EcmaScript 6) sudah dikenalkan kata kunci class yang akan nanti dibahas di chapter tersendiri
97+
98+
99+
Cara Kerja Prototype Inheritance
100+
=> Cara property di prototype diakses dari object instance :
101+
Ketika mengakses property di object instance, pertama akan dicek
102+
apakah di object tersebut terdapat property tersebut atau tidak,
103+
jika tidak, maka akan di cek di _proto_(prototype) nya,
104+
jika masih tidak ada, akan dicek lagi di _proto_(prototype) yang lebih tinggi,
105+
begitu seterusnya, sampai berakhir di object prototype
106+
107+
Membuat Class
108+
=> Sejak EcmaScript versi 6, diperkenalkan kata kunci baru,
109+
yaitu class, ini merupakan kata kunci yang digunakan untuk membuat class di JavaScript
110+
=> Dengan kata kunci class, kita tak perlu lagi membuat constructor function untuk membuat
111+
class
112+
113+
Constructor di Class
114+
=> Karena bentuk constructor function dengan function,
115+
jadi bisa menambah parameter pada constructor function, lantas bagaiman dengan class ?
116+
=> Di Class juga kita bisa menambah constructor, dimana dengan menggunaan constructor,
117+
kita juga bisa menambah parameter saat pertama kali membuat objectnya
118+
=> Untuk membuat constructor di class, kita bisa menggunakan kata kunci constructor
119+
120+
Property di Class
121+
=> Sama seperti pada constructor function,
122+
dalam class pun kita bisa menambahkan property
123+
=> karena hasil akhirnya adalah sebuah object,
124+
jadi menambkan property di class bisa dilakukan instance objectnya
125+
126+
Method di Class
127+
=> Membuat menthod sebenarnya bisa dilakukan
128+
dengan cara seperti menambahkan method di constructor function
129+
=> Namun, hal tersebut sebenarnya menambahkan method ke dalam instance object
130+
=> Khusus untuk method sebaiknya kita menambahkan ke prototype,
131+
bukan ke instance object
132+
=> Untungnya di class, ada cara mudah menambahkan method dan seceara otomatis ditambahkan
133+
ke prototype
134+
135+
Class Inheritance
136+
=> Sebelumnya kita mengetahui bahwa Prototype mendukung pewarisan,
137+
walaupun agak sedikit tricky cara pembuatannya
138+
=> Untungnya itu diperbaiki ES6 (EcmaScript 6) dengan fitur class nya
139+
=> Sebuah class bisa melakukan dari class lainnya dengan menggunaan kata kunci extends
140+
=> Di JavaScript, class inheritance sama seperti prototype inheritance,
141+
hanya bisa memiliki satu parent class
142+
143+
Super Constructor
144+
=> Class inheritance sifatnya seperti Property Inheritance
145+
=> Bagaimana dengan Constructor Inheritance?
146+
Sebenarnya Constructor hanyalah melakukan eksekusi constructor lain
147+
dengan tujuan agar property di constructor lain bisa ditambahkan ke instance object ini
148+
=> Dalam kasus ini, jika kita ingin mencapai hasil yang sama,
149+
kita bisa menggunakan kata kunci super di dalam constructor
150+
=> Kata kunci super digunakan untuk memanggil constructor super class
151+
=> Jika di child class kita membuat constructor, maka kita wajib memanggil parent constructor,
152+
walaupun di parent tidak ada constructor
153+
154+
Super Method
155+
=> Selain digunakan untuk memanggil constructor milih parent class,
156+
kata kunci super juga bisa digunakan untuk mengakses method parent class
157+
=> Caranya bisa menggunakan super titik nama functionnya
158+
=> Dengan kata lain, supert sebenarnya adalah reference ke parent prototype,
159+
sama seperti _proto_
160+
161+
Getter & Setter
162+
=> Class juga mendukung pembuatan getter & Setter
163+
=> Perlu diingat, getter & setter ini akan berasa di prototype,
164+
bukan di instance object
165+
166+
Class field
167+
=> Biasanya, saat kita ingin menambahkan field (property yang berisikan value),
168+
kita biasanya tambahkan di constructor
169+
=> Namun, ada proposal di EcmaScript yang mengajukan pembuatan public class field
170+
di tempatkan di luar constructor, selevel dengan penempatan method
171+
=> Proposal ini masih belum final, namun beberapa browser sudah mendukungnya
172+
https://github.com/tc39/proposal-class-fields
173+
174+
Public Class field
175+
=> Dalam proposal tersebut juga disebutkan
176+
bahwa EcmaScript akan mendukung access modifier public dan private
177+
=> Public artinya diakses dari luar class,
178+
dan private hanya bisa diakses dari dalam class saja
179+
=> Private class field akan kita bahas di chapter selanjutnya
180+
=> Untuk membuat public class field, kita bisa langsung buat nama field dengan valuenya
181+
selevel dengan method
182+
=> Jika kita tidak memasukkan vaule ke dalam field tersebut,
183+
artinya field tersebut memilik value undefined
184+
185+
Private Class field
186+
=> Secara default, saat kita menambahkan field,
187+
maka field tersebut bisa diakses dari manapun
188+
=> Jika kita ingin menggunakan field yang bersifat private
189+
(hanya bisa diakses di dalam class), kita bisa menggunakan tanda "#" sebelum nama fieldnya
190+
=> Ini dinamakan private class field, dan hanya bisa diakses dari dalam class saja;
191+
192+
Private Method
193+
=> Sama seperti field, terdapat proposal juga
194+
untuk menambah fitur private method di EcmaScript
195+
=> Dengan demikian, access modifier private juga bisa digunakan di method
196+
=> Caranya sama, dengan menambahkan tanda "#" diawal method,
197+
maka secara otomatis method tersebut adalah Private
198+
=> Ingat fitur ini masih dalam tahapan, belum benar-benar menjadi standat EcmaScript,
199+
jadi kemungkinan tidak semua browser mendukung fitur ini
200+
https://github.com/tc39/proposal-private-methods
201+
202+
Operator InstanceOf
203+
=> Kadang ada kasus kita ingin mengecek apakah sebuah object merupakan instance dari class
204+
tertentu atau bukan
205+
=> Kita tidak bisa menggunaan operator typeOf,
206+
karena object dari class,
207+
jika kita gunakan operator typeOf, hasilnya adalah "Object"
208+
=> Operator InstanceOf akan menghasilkan boolean,
209+
true jika benar object tersebut adalah instance objectnya, atau false jika bukan
210+
211+
Operator instanceof di Class Inheritance
212+
=> Operator instanceof mendukung class inheritance,
213+
artinya instanceof juga bisa digunakan untuk mengecek,
214+
apakah sebuah object adalah instance dari class tertentu,
215+
atau turunan dari class tertentu?
216+
217+
Kata kunci Static
218+
=> Static adalah kata kunci yang bisa kita tambahkan sebelum field atau method,
219+
biasanya ketika kita membuat field atau method,
220+
maka secara otomatis field akan menjadi property di instance object,
221+
dan method akan menjadi function di prototype
222+
=> Jika kita tambahkan static, maka hal itu tidak terjadi
223+
224+
Static Class field
225+
=> Jika kita tambahkan static dalam class field,
226+
secara otomatis field tersebut bukan lagi milik instance object,
227+
melainkan milik class nya itu sendiri
228+
=> Biasanya static digunakan jika ingin membuat utility field atau function
229+
=> Cara mengakses static class field pun tidak lagi lewat object,
230+
melainkan lewat class nya
231+
=> Static class field bisa diartikan sifatnya global,
232+
tidak peduli diakses dimana atau siapa yang mengakses,
233+
hasilnya akan sama
234+
235+
Static Method
236+
=> Kata kunci static juga tidak hanya bisa ditambahkan di field, tapi juga di Method
237+
=> Jika kita tambahkan di method, artinya method tersebut jadi milik class nya, bukan prototype
238+
=> Dan untuk mengakses method tersebut, kita juga bisa lakukan seperti mengakses static class field
239+
240+
Error
241+
=> Saat membuat aplikasi, sudah tentu kita tidak akan terhindar dari yang namanya Error
242+
=> Di JavaScript, Error merupakan sesuatu yang sudah Standar
243+
=> Banyak selaki class error di JavaScript,
244+
namun semua class erro di JavaScript selalu berujung di class Error,
245+
artinya class error adalah superclass untuk semua jenis error di JavaScript
246+
=> Contoh class error yang terdapat di JavaScript
247+
- Error
248+
- AggregateError
249+
- EvalError
250+
- RangeError
251+
- ReferenceError
252+
- SyntaxError
253+
- TypeError
254+
- URIError
255+
- InternalError
256+
=> https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects#error_objects
257+
258+
Throw Error
259+
=> Saat kita membuat instance object dari class Error,
260+
tidak lantas otomatis terjadi error
261+
=> Kita perlu memberitahu program kita,
262+
bahwa kita akan mentrigger sebuah error terjadi,
263+
atau istilahnya adalah melempar error (throw error),
264+
kita bisa gunakan kata kunci throw, diikuti dengan instance object error nya
265+
266+
Error Handling
267+
=> Saat terjadi error di kode program JavaScript,
268+
kadang kita tidak ingin program kita berhenti
269+
=> Di JavaScript, kita bisa menangkap jika terjadi error
270+
=> Kita bisa menggunakan try catch statement
271+
untuk menangkap error
272+
=> Pada block try, kita akan mencoba mengakses kode program yang bisa menyebabkan error,
273+
dan jika terjadi error, block try akan berhenti dan otomatis masuk ke block catch
274+
=> Jika tidak terjadi error, block catch tidak akan dieksekusi
275+
276+
Kata kunci finally
277+
=> Kadang kita ingin melakukan sesuatu entah itu terjadi error ataupun tidak
278+
=> Dalam try catch, kita bisa menambahkan block finally
279+
=> Block finally ini akan selalu dieksekusi setelah try catch selesai,
280+
entah terjadi error atau tidak, block finally akan selalu dieksekusi
281+
282+
Try finally
283+
=> Kata kunci finally juga bisa digunakan tanpa perlu menggunaan catch
284+
=> Biasanya ini digunakan dalam kasus tertentu
285+
286+
Class Error Manual
287+
=> Walaupun JavaScript sudah memiliki Standard class Error
288+
=> Namun alangkah baiknya, kita membedakan tiap jenis Error
289+
=> Untuk membuat error sendiri secara manual sangatlah mudah,
290+
cukup membuat class turunan dari class error
291+
=> Dan jangan lupa tambahkan parameter message, agar bisa dikirimkan ke parameter di constructor class Error
292+
293+
Iterable & Iterator
294+
=> Salah satu fitur terbaru di ES6 (EcmaScript 6)
295+
adalah Iterable
296+
=> Iterable adalah spesial object yang memiliki standarisasi
297+
=> Dengan mengikuti standarisasi Iterable, secara otomatis kita bisa melakukan iterasi
298+
terdapat data tersebut dengan menggunaan perulangan for .. typeOf
299+
=> Contoh yang sudah mengikuti standarasi Iterable
300+
adalah String, Arrray, Object, dan lain-lain.
301+
302+
Cara kerja Iterable dan Iterator
303+
=> Jika kita mengikuti kontrak Iterable,
304+
maka object yang kita buat akan bisa dilakukan iterasi
305+
menggunaan for...of
306+
=> Setiap kita melakukan perulangan, object Iterator akan dibuat
307+
=> Hal ini menjadi aman jika kita melakukan iterasi berulang-ulang,
308+
karena Iterator baru akan dibuat terus-menerus

01-object-construction-function.html

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
4+
<head>
5+
<meta charset="UTF-8" />
6+
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
7+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
8+
<title>Object - Construction Function</title>
9+
</head>
10+
11+
<body>
12+
<script>
13+
function Person() {
14+
this.firstName = "";
15+
this.middleName = "";
16+
this.lastName = "";
17+
}
18+
19+
const faqih = new Person();
20+
faqih.firstName = "Faqih";
21+
faqih.middleName = "Pratama";
22+
faqih.lastName = "Muhti";
23+
24+
const fitrya = new Person();
25+
fitrya.firstName = "Fitrya";
26+
fitrya.middleName = "";
27+
fitrya.lastName = "Muhti";
28+
29+
console.info(faqih);
30+
console.info(fitrya);
31+
</script>
32+
</body>
33+
34+
</html>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
4+
<head>
5+
<meta charset="UTF-8" />
6+
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
7+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
8+
<title>Object - Property @ Construction Function</title>
9+
</head>
10+
11+
<body>
12+
<script>
13+
function Person() {
14+
this.firstName = "";
15+
this.middleName = "";
16+
this.lastName = "";
17+
}
18+
19+
const faqih = new Person();
20+
faqih.firstName = "Faqih";
21+
faqih.middleName = "Pratama";
22+
faqih.lastName = "Muhti";
23+
24+
const fitrya = new Person();
25+
fitrya.firstName = "Fitrya";
26+
fitrya.middleName = "";
27+
fitrya.lastName = "Muhti";
28+
29+
console.info(faqih);
30+
console.info(fitrya);
31+
</script>
32+
</body>
33+
34+
</html>

0 commit comments

Comments
 (0)