memperkenalkan
Ini memainkan peran yang sangat penting dalam berbagai pemrograman objek dan terutama digunakan untuk menunjuk ke objek pemanggil. Namun, dalam JavaScript, performanya sangat berbeda, terutama dalam konteks eksekusi yang berbeda.
Dari artikel sebelumnya kita mengetahui bahwa ini juga merupakan atribut dalam konteks eksekusi, sehingga ditakdirkan untuk tidak dapat dipisahkan dari konteks eksekusi.
Copy kode kodenya sebagai berikut:
Konteks Eksekusi aktif = {
SUARA: {...},
ini: Nilai ini};
Dalam Javascript, nilainya bergantung pada mode panggilan. Ada empat mode pemanggilan: mode pemanggilan metode, mode pemanggilan fungsi, mode pemanggilan konstruktor, dan mode penerapan pemanggilan.
modus panggilan
Pola pemanggilan metode
Ketika suatu fungsi disimpan sebagai properti suatu objek, kita menyebutnya metode. Ketika suatu metode dipanggil, ini terikat pada objeknya, yaitu, pola pemanggilan metode ini menunjuk ke objek pemanggil. Ini sangat mudah dimengerti. Anda adalah metode saya, Anda milik saya, dan tentu saja ini menunjuk pada saya.
Copy kode kodenya sebagai berikut:
var objek saya = {
nilai: 0,
kenaikan : function(inc) {
this.value += typeof inc === "angka" ?
}
}
myObject.peningkatan();
konsol.log(objek saya.nilai); //Keluaran: 1
myObject.peningkatan(3);
konsol.log(objek saya.nilai); //Keluaran: 4
Karena Anda dapat mengakses objek milik Anda melalui ini, Anda dapat memanggil dan mengubah properti atau metode dalam objek melalui ini. Seperti yang dapat dilihat dari artikel sebelumnya, ini, sebagai anggota atribut dalam konteks eksekusi, harus dibuat ketika konteks dibuat. Semua pengikatan ini ke objek terjadi pada saat panggilan, yaitu " " pengikatan tertunda". Tingkat penggunaan kembali yang tinggi dapat dicapai melalui pengikatan yang tertunda.
Copy kode kodenya sebagai berikut:
fungsi menunjukkanNilai(){
console.log(ini.nilai);
}
var a = { nilai : "a"};
var b = { nilai : "b"};
a.nilai pertunjukan = nilai pertunjukan;
b.nilai pertunjukan = nilai pertunjukan;
a.showValue(); //Keluaran "a"
b.showValue(); //Keluaran "b"
Fungsi showValue pada contoh di atas termasuk dalam pengikatan tertunda.
pola pemanggilan fungsi
Ketika suatu fungsi tidak dipanggil sebagai metode suatu objek, itu adalah pemanggilan fungsi. Dalam mode pemanggilan fungsi, ini terikat pada objek global. (Ini adalah kesalahan dalam desain bahasa)
Copy kode kodenya sebagai berikut:
objek saya.ganda = fungsi(){
var itu = ini; //Solusi
var pembantu = fungsi(){
console.log(itu, ": ", itu.nilai); //Objek Keluaran {nilai: 4, kenaikan: fungsi, ganda: fungsi} ": " 4
console.log(ini, ": ", ini.nilai); //Jendela Keluaran {atas: Jendela, jendela: Jendela…} ": " tidak ditentukan
}
pembantu(); //Panggil sebagai fungsi
}
Menurut pemikiran normal, sebagai keluaran pada baris keempat, ini seharusnya menunjuk pada objek yang memiliki fungsi tersebut. Namun, karena masalah dalam desain bahasa, ini menunjuk pada objek global. Hal ini membuat hal ini semakin misterius dan tidak dapat diprediksi. Namun sebagai pengembang, situasi ini jelas merupakan sesuatu yang tidak ingin kami lihat. Tidak masuk akal untuk bermain kartu. Untungnya, solusinya juga sangat sederhana. Dengan cara ini, pemanggilan that dalam metode helper dapat digunakan seperti ini, yang sederhana dan nyaman. Sedangkan untuk mode pemanggilan fungsi, mengapa berperilaku seperti ini akan dijelaskan secara rinci nanti saat menganalisis tipe referensi.
Pola pemanggilan konstruktor
Karena JavaScript didasarkan pada pewarisan prototipe, perancangnya ingin agar JavaScript dapat membuat objek melalui konstruktor baru dan seperti bahasa berorientasi objek tradisional, mewujudkan pemrograman berorientasi objek. Ini sepertinya bukan ide yang bagus, dan agak memalukan jika menggambar harimau daripada anjing. Salah satunya adalah tidak mungkin untuk belajar, tetapi tidak perlu untuk belajar. Mekanisme pewarisan prototipe JavaScript sudah sangat kuat, cukup untuk memenuhi polimorfisme pewarisan yang diperlukan untuk berorientasi objek.
Tanpa basa-basi lagi, mari kita bahas tentang pola pemanggilan konstruktor. Pola pemanggilan konstruktor sangat sederhana, yaitu menggunakan fungsi sebagai konstruktor, lalu menggunakannya untuk memperkenalkan properti dan metode yang ingin Anda publikasikan. sebagai berikut
Copy kode kodenya sebagai berikut:
fungsi Orang(nama, umur){
ini.nama = nama;
this.usia = usia;
ini.katakan = fungsi(){
console.log("nama : %s, umur : %n", ini.nama, ini.usia);
}
}
var p1 = Orang baru("jink", 24);
p1.say(); //Nama keluaran: jink, umur: 24
var p2 = Orang baru("Zhang San", 33);
p2.say();//Nama keluaran: Zhang San, usia: 33
Dari contoh di atas, kita dapat melihat dengan jelas bahwa ini menunjuk pada objek yang dibuat melalui new dan konstruktor. Mengapa ini terjadi? Ini karena ketika konstruktor dipanggil melalui new di JavaScript, operator baru memanggil metode internal [[Construct]] dari fungsi "Person", dan kemudian, setelah objek dibuat, metode internal [[Call]] adalah ditelepon. Semua fungsi yang sama "Orang" menetapkan nilai ini ke objek yang baru dibuat.
terapkan mode panggilan
Setelah semua fungsi dalam JavaScript dibuat, mereka akan memiliki dua metode: terapkan dan panggil. Saya tidak ingin menjelaskan secara spesifik penggunaan kedua metode ini secara detail di sini, bagi siswa yang belum mengetahuinya dapat mencari di Baidu. Melalui dua cara, kita bisa mengaturnya secara manual. Meskipun ini tidak diperbolehkan untuk diubah selama pembuatan, jika kita mengaturnya secara manual sebelum pembuatan, itu masalah lain. Pengaturan ini luar biasa, Anda dapat membuat objek Anda memanggil metode apa pun, seperti Anda dapat membuat mobil berlayar di laut, gajah Afrika berkecepatan seperti jaguar, dan seorang programmer bermain seperti seorang pianis. Haha, imajinasi selalu indah. Memanggil adalah memanggil, tapi apakah fungsinya bisa terwujud setelah menelepon adalah soal lain.
Copy kode kodenya sebagai berikut:
var pemrogram = {
nama: "Pemrogram",
tangan: "tangan fleksibel",
program : fungsi(){
console.log(ini.nama+"Tulis kode dengan "+ini.tangan+".");
}
}
var pianis = {
nama: "pianis",
tangan: "tangan fleksibel",
bermain : fungsi(){
console.log(this.name+"Putar musik indah dengan "+this.hand+".");
}
}
var pemain = {
nama: "atlet",
kaki: "Kaki yang kuat",
jalankan : fungsi(){
console.log(this.name+"Gunakan "+this.foot+" untuk berlari di lapangan.");
}
}
//Ikuti aturannya
programmer.programme(); //Pemrogram menulis kode dengan tangan yang fleksibel.
pianis.play(); //Pianis menggunakan tangannya yang fleksibel untuk memainkan musik yang indah.
player.run(); //Atlet berlari di lapangan dengan kaki yang kuat.
//aneh
pianis.play.apply(programmer); //Pemrogram menggunakan tangannya yang fleksibel untuk memainkan musik yang indah.
player.run.apply(programmer); //Pemrogram menggunakan undefinisi untuk berjalan di lapangan. Karena kurang latihan fisik, kaki saya tidak kuat
Tampaknya menarik untuk dilihat di atas. Parameter pertama dari apply adalah penunjuk ini dalam metode eksekusi. Dengan cara ini, kita dapat meminjam metode orang lain dan menggunakannya secara diam-diam, dan ini sangat memudahkan. Jenis teknik ini sering digunakan dalam beberapa kerangka kerja.
Meringkaskan
Itu saja yang ingin saya katakan tentang ini. Saya yakin setelah membaca ini, setiap orang akan memiliki pemahaman tentang penentuan ini dalam situasi yang berbeda. Awalnya saya berencana untuk membahas objek referensi selanjutnya dan menjelaskan nilainya dalam mode pemanggilan metode dan prinsip mode pemanggilan fungsi, tetapi saya khawatir panjangnya akan terlalu panjang, jadi saya memutuskan untuk menggunakan bab terpisah untuk menganalisis konsep objek referensi.