-
-
Notifications
You must be signed in to change notification settings - Fork 176
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
docs: Menambahkan Dokumentasi Function Scope dan Keyword This (#366)
* docs: Menambahkan Dokumentasi Function Scope dan Keyword This * fix: Memperbaiki functionScope.js dan /007_Keyword_This/example.js * fix: Memperbaiki functionScope.js * fix: Menambahkan no-use-before-define
- Loading branch information
1 parent
3e235d5
commit 7885b5a
Showing
4 changed files
with
218 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
// == Contoh == // | ||
|
||
// 1. Mendefisikan variabel didalam fungsi | ||
function memancing() { | ||
let ikan = "Lele"; | ||
console.log(ikan); | ||
} | ||
|
||
// Menampilkan variabel ikan yang didefinisikan didalam fungsi memancing() | ||
// eslint-disable-next-line no-undef, no-use-before-define | ||
console.log(ikan); // Error: ikan tidak terdefinisikan | ||
memancing(); // Lele | ||
|
||
// 2. Mendefisikan variabel diluar fungsi | ||
let ikan = "Gurame"; | ||
|
||
function kolamIkan() { | ||
console.log(ikan); | ||
} | ||
|
||
// Menampilkan variabel ikan yang didefinisikan diluar fungsi kolamIkan() | ||
console.log(ikan); // Gurame | ||
kolamIkan(); // Gurame | ||
|
||
// 3. Deklarasi variabel didalam dan diluar fungsi | ||
let noktunal = "Kelelawar"; | ||
let diurnal = "Gajah"; | ||
|
||
function hewan() { | ||
let nokturnal = "Burung Hantu"; | ||
console.log(nokturnal); | ||
console.log(diurnal); | ||
} | ||
|
||
// Menampilkan variabel mamalia yang didefinisikan didalam dan diluar fungsi | ||
console.log(diurnal); // Gajah | ||
console.log(noktunal); // Kelelawar | ||
hewan(); // Burung Hantu & // Gajah |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
# _The Keyword This_ | ||
|
||
Kata kunci `this` digunakan untuk mengakses properti lain di dalam objek parentnya / objek yang sama, untuk pemahaman mengenai kata kunci `this` silahkan dibaca, dipahami, dan dicoba contoh kode dibawah ini. | ||
|
||
## Contoh & Penjelasan : | ||
|
||
```js | ||
// Membuat objek dan menampilkan data didalamnya | ||
const buah = { | ||
nama: 'Jeruk', | ||
warna: 'Oranye', | ||
rasa: 'Manis', | ||
namaBuah() { | ||
return nama | ||
}, | ||
warnaBuah() { | ||
return this.warna | ||
}, | ||
fakta() { | ||
return `Buah ${this.nama} berwarna ${this.warna} rasanya ${this.rasa}` | ||
} | ||
} | ||
|
||
console.log(buah.namaBuah()) // Error: 'nama' tidak terdefinisikan | ||
``` | ||
|
||
Objek `nama` tidak terdefinisikan karena merupakan properti didalam objek yang sama bukan sebuah variabel sehingga untuk mengakses properti objek diperlukan kata kunci `this` sebelumnya. | ||
|
||
```js | ||
console.log(buah.warnaBuah()) // Oranye | ||
``` | ||
|
||
Dengan menambahkan kata kunci `this` maka properti objek dapat diakses. | ||
|
||
Dan dapat diimplemantasikan pada fungsi didalam objek tersebut. | ||
|
||
```js | ||
console.log(buah.fakta()) // Buah Jeruk berwarna Oranye rasanya Manis | ||
``` | ||
|
||
Membuat objek lain untuk mencoba akses properti pada objek `buah`. | ||
|
||
```js | ||
const hewan = { | ||
nama: 'Monyet', | ||
aksi: 'Melompat', | ||
makan() { | ||
return `${this.nama} ${this.aksi} untuk mengambil ${buah.nama} yang berwarna ${buah.warnaBuah()}` | ||
}, | ||
cekThis() { | ||
console.log("Nilai dari 'this' adalah", this) | ||
} | ||
} | ||
|
||
console.log(hewan.makan()) // Monyet Melompat untuk mengambil Jeruk yang berwarna Oranye | ||
``` | ||
|
||
Alhasil seluruh properti dalam objek buah juga dapat diakses oleh objek lain. | ||
|
||
Kemudian untuk mengetahui isi dari `this` bisa dicoba jalankan fungsi cekThis() yang ada didalam objek `hewan`. | ||
|
||
```js | ||
console.log(hewan.cekThis()) // Nilai dari 'this' adalah {hewan Object} | ||
``` | ||
|
||
Alhasil yang ditampilkan adalah objek `hewan`, oleh karena itu properti didalam objek `hewan` dapat diakses oleh fungsi cekThis() yang ada didalamnya. | ||
|
||
Dan terakhir coba membuat variabel yang mereferensikan fungsi didalam objek hewan. | ||
|
||
```js | ||
const isiThis = hewan.cekThis | ||
|
||
console.log(hewan.cekThis) // cekThis() { console.log("Nilai dari 'this' adalah", this) } | ||
|
||
console.log(isiThis()) // Nilai dari 'this' adalah {window Object} | ||
``` | ||
|
||
Nahh `this` dari variabel `isiThis` adalah objek `window` bukan objek `hewan` karena nilai dari variabel `isiThis` berisikan baris kode fungsi cekThis() yang mana fungsi tersebut dijalankan diluar objek `hewan` dikarenakan kata kunci `this` menginvokasi objek parentnya sehingga `this` di variabel `isiThis` mengakses properti objek `window` yang merupakan default objek berisikan kumpulan fungsi dari javascript. | ||
|
||
Oleh karena itu perlu diperhatikan penggunaan kata kunci `this` agar output yang didapatkan sesuai dengan ekspektasi yang diinginkan. | ||
|
||
[Contoh Kode 📂](example.js) | ||
|
||
[<img align="left" src="https://api.bellshade.org/badge/navigation?badgeType=previous&text=Immutability" />](../006_Immutability) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
/* eslint-disable no-undef */ | ||
// == Contoh == // | ||
|
||
// Membuat objek dan menampilkan data didalamnya | ||
const buah = { | ||
nama: "Jeruk", | ||
warna: "Oranye", | ||
rasa: "Manis", | ||
namaBuah() { | ||
return nama; | ||
}, | ||
warnaBuah() { | ||
return this.warna; | ||
}, | ||
fakta() { | ||
return `Buah ${this.nama} berwarna ${this.warna} rasanya ${this.rasa}`; | ||
} | ||
}; | ||
|
||
console.log(buah.namaBuah()); // Error: 'nama' tidak terdefinisikan | ||
console.log(buah.warnaBuah()); // Oranye | ||
console.log(buah.fakta()); // Buah Jeruk berwarna Oranye rasanya Manis | ||
|
||
const hewan = { | ||
nama: "Monyet", | ||
aksi: "Melompat", | ||
makan() { | ||
return `${this.nama} ${this.aksi} untuk mengambil ${ | ||
buah.nama | ||
} yang berwarna ${buah.warnaBuah()}`; | ||
}, | ||
cekThis() { | ||
console.log("Nilai dari 'this' adalah", this); | ||
} | ||
}; | ||
|
||
console.log(hewan.makan()); // Monyet Melompat untuk mengambil Jeruk yang berwarna Oranye | ||
console.log(hewan.cekThis()); // Nilai dari 'this' adalah {hewan Object} | ||
|
||
const isiThis = hewan.cekThis; | ||
|
||
console.log(hewan.cekThis); // cekThis() { console.log("Nilai dari 'this' adalah", this) } | ||
console.log(isiThis()); // Nilai dari 'this' adalah {window Object} |