Advance JavaScript 7 - this pada arrow function

Advance JavaScript 7 - this pada arrow function

Kita disini masih membahas seputar arrow function,yang dimana Kali ini Kita akan membahas koneks dari this jika Kita menggunakan arrow function.





Kita semua sudah Tau bahwa di dalam function declaration maupun expression itu mempunyai konteks this ,nah jika Kita mengubah sebuah function expression menjadi arrow function  maka konteks this nya itu menjadi berbeda.



Contoh code nya


Constructur function

const mahasiswa = function () {
this.nama = 'gimasn'
this.umur = 33,
this.sayhello = function (){
console.log('hallo nama saya, ${this.nama}, Dan saya ${this.umur}, tahun';
}


}


const gimasn = new mahasiswa()




Ini kalau dijalankan tidak Ada masalah normal normal Saja namun jangan gunakan arrow function untuk membuat constructur function karena tidak bisa Dan akan error jadi tidak bisa semua function itu diubah begitu saja menjadi arrow function. Tetapi kalau methode bisa 




Constructur function

const mahasiswa = function () {
this.nama = 'gimasn'
this.umur = 33,
this.sayhello =  () => {
console.log('hallo nama saya, ${this.nama}, Dan saya ${this.umur}, tahun';
}


}


const gimasn = new mahasiswa()

Seperti ini ,kalau ini dijalankan ga error ,kelihatan nya sama saja ketika memakai function expression Dan arrow function Tapi sebetulnya pada saat Kita gunakan arrow function  ,arrow function sebetulnya tidak menyimpan konteks this ,ini akan berbeda ketika Kita bikin object nya tidak menggunakan constructur function Tapi pake object literal.


const murid  = {
nama : "gimasn,
umur: 32,
sayhello : function () {
console.log('hallo, nama saya ${nama } saya ${umur}, tahun')
}


}


Kalau dijalankan ini masih normal Saja namun ini akan beda jika method nya Kita ganti menjadi arrow function

const murid  = {
nama : "gimasn,
umur: 32,
sayhello :  () => {
console.log('hallo, nama saya ${nama } saya ${umur}, tahun')
}


}

Ini kalau dijalankan akan memunculkan undefined, sekarang this ini tidak mencari ke lexical scope nya , karena tadi arrow function tidak mempunyai konsep this, maka dia akan nyari ke atas nya ada this ga kalau ga Ada dia nyari ke atas nya lagi sampai di window, di window kalau ga Ada this maka maka tampilkan undefined





Contoh kasus 

const mahasiswa () {
this.nama = 'gimasn';
this.umur = 33;
this.sayhello = function () {
console.log('hallo nama saya, ${this.nama}, saya ${this.umur}, tahun');
}

setinterval(function () {
console.log(this.umur++);

},500);




}


const gimas = new mahasiswa ()




Ini akan menghasilkan NaN, kenapa NaN  Karena yang dia jumlahin bukan 33 window, 


Untuk mengatasi ini Kita bisa memakai arrow function tadi


const mahasiswa () {
this.nama = 'gimasn';
this.umur = 33;
this.sayhello = function () {
console.log('hallo nama saya, ${this.nama}, saya ${this.umur}, tahun');
}

setinterval(()  => {
console.log(this.umur++);

},500);




}


const gimas = new mahasiswa ()


Pahami logika nya sekarang kalau ini dijalankan arrow function tidak punya konsep this ,maka this nya akan mencari ke lexical scope nya ,jadi sekarang this nya yaitu mahasiswa sehingga Kita kasih this umur ++ angkanya nambah 


Jadi tidak semua function itu bisa diganti dengan menggunakan arrow function

Komentar

Postingan populer dari blog ini

ethical hacking part 14 membuat malware Trojan

CSS layouting - box model: CSS reset

ethical hacking part 3 reconnaissance & information gethering