Pemahaman saya tentang ini selalu hanya tentang bisa menggunakannya dan mengetahuinya, tetapi saya belum mempelajari esensinya. Kali ini, saya memiliki pemahaman yang mendalam dengan "JavaScript bagian yang baik". (Semua debugging dapat dilihat di Konsol, Kunci F12 Browser)
Mari kita lihat ini bersama -sama.
Ketika kami mendeklarasikan suatu fungsi, setiap fungsi memiliki dua parameter tambahan (parameter formal) yang ditentukan, satu adalah ini dan yang lainnya adalah argumen. Argumen adalah parameter yang sebenarnya diterima oleh fungsi, dan merupakan berbagai kelas. Saya hanya akan memberikan pengantar singkat untuk argumen, dan kami akan fokus pada penunjuk ini.
Dalam transformasi yang berorientasi objek, ini sangat penting, dan nilainya tergantung pada pola panggilan. Dalam JavaScript, ada 4 pola panggilan secara total: pola panggilan metode, pola panggilan fungsi, pola panggilan konstruktor, dan menerapkan pola panggilan.
Mode Panggilan Metode
Ketika suatu fungsi adalah atribut sebagai objek, kami biasanya menyebut fungsi ini metode objek ini. Ketika metode ini dipanggil, ini menunjuk ke objek yang menjadi milik metode.
Salinan kode adalah sebagai berikut:
<type skrip = "Teks/JavaScript">
var people = {
Nama: "Yika",
SayName: function () {
console.log (this.name); // "yika"
// ini telah terikat pada objek orang
}
}
people.sayname ();
</script>
Seperti yang ditunjukkan oleh Chestnut, ini menunjuk pada objek Sayname. Metode ini mendapatkan konteks objek melalui ini adalah metode publik. (Metode publikasi)
Mode Panggilan Fungsi
Ketika suatu fungsi dipanggil bukan metode pada suatu objek, itu disebut sebagai fungsi.
Panggilan pola ini akan menunjuk ke objek jendela, bahkan jika fungsi ini dapat dipanggil dalam fungsi eksternal, mari kita lihat.
Salinan kode adalah sebagai berikut:
<type skrip = "Teks/JavaScript">
var name = "window-yika";
var people = {
Nama: "People-yika",
Siswa: function () {
Console.log (ini); // Ini mengikat objek orang di sini
fungsi mengatakanName () {
var name = "sayname-yika";
console.log (this.name); // Window-yika
// Bahkan jika fungsi Sayname itu sendiri dan objek orang itu terletak memiliki nilai nama, ini menunjuk ke jendela
};
Sayname ();
}
}
people.student ();
</script>
Dari perspektif ini, apakah Anda tahu cara menyelesaikan "kesalahan desain" JavaScript.
Ya, cukup cache ini dalam fungsi siswa, yaitu, baris 6. Kemudian transfer ini ke fungsi Sayname melalui variabel untuk menyelesaikannya!
Salinan kode adalah sebagai berikut:
var people = {
Nama: "People-yika",
Siswa: function () {
var self = ini; // cache ini
fungsi mengatakanName () {
var name = "sayname-yika";
console.log (self.name); // "orang-yika", pada saat ini, diri menunjuk ke objek orang
};
Sayname ();
}
}
Mode panggilan konstruktor
Ketika JavaScript berbicara tentang konstruktor, Anda akan berpikir: "Nama fungsi dikapitalisasi! Gunakan operator baru saat menelepon!" Kapitalisasi nama fungsi mudah dimengerti, untuk membakukan penamaan konstruktor. Tetapi apakah Anda pernah mempelajari mengapa Anda perlu menggunakan yang baru? Jika Anda memanggil fungsi baru dengan yang baru, latar belakang fungsi akan membuat objek baru yang menunjuk ke prototipe fungsi, dan ini juga terikat pada objek baru. JavaScript adalah bahasa berdasarkan prototipe warisan. Siswa yang tidak terlalu jelas tentang prototipe prototipe dapat memeriksa informasi sendiri. Saya fokus pada ini.
Pertama -tama mari kita lihat seperti apa konstruktor itu pada umumnya.
Salinan kode adalah sebagai berikut:
<type skrip = "Teks/JavaScript">
function people (name) {
this.name = name; // Ini di sini menunjuk ke objek baru Yika setelah menyebutnya dengan baru
this.sayname = function () {
console.log (this.name); //Keluaran
}
}
var yika = orang baru ("yika");
Yika.sayname (); // output "yika" karena yika diperoleh melalui panggilan baru, ini terikat pada objek yika.
</script>
Sekilas, tampaknya tidak mudah dimengerti. Mengapa ini menunjuk ke jendela di fungsi sekarang, dan sekarang Anda dapat menunjuk ke fungsi orang tanpa cache?
Tidak masalah. Bukankah Anda hanya mengatakan bahwa fungsinya akan melakukan "melakukan hal -hal buruk" secara diam -diam dengan menelepon yang baru? Mari kita lihat apa yang sebenarnya Anda lakukan.
Salinan kode adalah sebagai berikut:
<type skrip = "Teks/JavaScript">
function people (name) {
var that = {}; // hal buruk satu: menghasilkan objek sendiri
itu.name = name;
itu.sayname = function () {
console.log (that.name);
};
kembalikan itu; // hal buruk 2, Anda akan mengubah perilaku pengembalian, mengembalikan objek yang baru saja dihasilkan
}
var yika = orang ("yika"); // Baru dapat dihilangkan di sini dan meniru panggilan ke operator baru
Yika.sayname (); // output "yika" seperti sekarang
</script>
Anda dapat melihat dengan jelas seperti ini. Baru tidak hanya akan menghasilkan objek, tetapi juga akan secara otomatis mengembalikan objek, sehingga ini secara alami akan menunjuk ke objek baru ini.
Ingatlah untuk menggunakan yang baru untuk memanggil konstruktor, jika tidak, tidak akan ada peringatan jika terjadi kesalahan, dan semua perjanjian modal masih sangat diperlukan.
Terapkan mode panggilan
Metode Apply memungkinkan kami untuk membangun array parameter yang diteruskan ke fungsi panggilan, yang juga memungkinkan kami untuk mengubah nilai ini.
function.Apply (nilai terikat ini, array parameter argumen)
Ada begitu banyak hal yang bisa saya katakan, saya hanya akan memberi Anda kastanye di sini untuk membantu Anda memahami:
Salinan kode adalah sebagai berikut:
<type skrip = "Teks/JavaScript">
function people (name) {
this.name = name;
this.sayname = function () {
console.log (this.name); // Metode Sayname milik orang -orang Konstruktor
}
}
function siswa (nama) {
Orang.
// Dengan cara ini, setiap kali contoh siswa dibuat, konstruktor orang akan dipanggil
}
var siswa = siswa baru ("yika");
student.sayname (); // output "yika"
</script>
Kita dapat dengan mudah memodifikasi fungsi objek yang mengikat ini melalui Apply. Panggilan yang mirip dengan Apply juga memiliki efek yang sama. Siswa yang tertarik dapat mencari dan mempelajarinya sendiri.
Oke, akhirnya kami selesai mengubah empat mode panggilan ini. Mode panggilan metode dan mode panggilan konstruktor akan digunakan lebih banyak, dan itu akan lebih penting. Untuk mode panggilan fungsi, kita harus belajar untuk menghindari jebakan di dalamnya.
Jika ada kesalahan, silakan laporkan tepat waktu dan saya akan memperbaikinya sesegera mungkin untuk mencegah orang lain menyesatkan. Terima kasih!