Artikel ini terutamanya memperkenalkan pengenalan kaedah panggilan dalam JavaScript Dalam JavaScript, jika fungsi kepunyaan objek, tindakan mengakses fungsi melalui objek dipanggil "memanggil kaedah". .
Dalam JavaScript, jika fungsi kepunyaan objek, tindakan mengakses fungsi melalui objek dipanggil "panggilan kaedah". Berbeza daripada panggilan fungsi biasa, apabila membuat panggilan kaedah, rujukan ini dalam fungsi akan berubah - ini akan merujuk kepada objek yang digunakan untuk memanggil fungsi (objek akan menjadi konteks panggilan kaedah panggilan):
var x = 99; var sample = { x:1, act:function(a){ this.x = a*a;//assign value to sample's x, not global object's x. } } sample.act(6); console.log(sample.x);//36 console.log(x);//9
Sama seperti mengakses sifat dalam objek, selain menggunakan operator titik, JavaScript juga boleh menggunakan operator kurungan untuk membuat panggilan kaedah:
//other ways to invoke method sample["act"](7); console.log(sample.x);//4
Untuk fungsi dalam JavaScript, tingkah laku yang lebih menarik ialah fungsi (penutupan) boleh dibenamkan dalam fungsi. Apabila membuat panggilan kaedah, jika terdapat fungsi terbenam dalam fungsi kaedah, maka kod dalam fungsi terbenam boleh mengakses nilai pembolehubah luaran:
//nested function can access variable outside of it. var y = 88; var sample2 = { y:1, act2:function(a){ this.y = inner(); function inner(){ return a*a; } } } sample2.act2(8); console.log(sample2.y);//64 console.log(y);//88
Walau bagaimanapun, bertentangan dengan gerak hati, fungsi terbenam code in tidak boleh mewarisi ini dari luar; iaitu, dalam fungsi terbenam, ini tidak merujuk kepada objek yang memanggil kaedah, tetapi objek global:
//nested function does not inherit "this". The "this" in nested function is global object var sample3 = { act3:function(){ inner(); function inner(){ console.log(this);//window object } } } sample3.act3();
Jika anda benar-benar perlu benamkan fungsi Untuk mengakses objek yang memanggil kaedah, anda boleh menyimpan nilai ini kepada pembolehubah dalam fungsi luaran:
//pass "this" to nested function var sample4 = { act4:function(){ var self = this; inner(); function inner(){ console.log(self);//Object {act4=function()} } } } sample4.act4();
Di atas ialah keseluruhan kandungan bab ini Untuk lebih banyak tutorial berkaitan, sila lawati Tutorial video JavaScript !