Jenis referensi
Jenis referensi terutama meliputi: Jenis objek, jenis array, jenis tanggal, jenis RegExp, tipe fungsi, dll.
Ketika jenis referensi digunakan, objek (instance) perlu dihasilkan dari mereka. Dengan kata lain, tipe referensi setara dengan templat. Ketika kita ingin menggunakan jenis referensi tertentu, kita perlu menggunakan templat ini untuk menghasilkan objek untuk digunakan, sehingga jenis referensi kadang -kadang disebut definisi objek.
Misalnya, kita perlu menghasilkan objek seseorang untuk mendefinisikan informasi dan perilaku pribadi seseorang, jadi kita perlu mengandalkan jenis objek:
var person = objek baru (); person.name = "jiangshui"; person.sayname = function () {console.log (this.name);}Objek orang di atas ditentukan oleh "templat" menggunakan operator baru menggunakan tipe objek. Setelah itu, Anda dapat menambahkan nama atribut dan metode Sayname ke objek ini. Properti dan metode adalah "fungsi" jenis objek, sehingga objek yang dibuat melalui jenis referensi seperti objek dapat digunakan.
Membuat objek tidak harus memerlukan penggunaan operator baru. Ada beberapa jenis yang dapat disederhanakan dalam membuat. Misalnya, membuat objek objek tipe seperti di atas, Anda juga dapat menggunakan dua metode berikut:
var person = {}; person.name = "jiangshui"; person.sayname = function () {console.log (this.name);}atau
var person = {name: "Jiangshui", sayname: function () {console.log (this.name); }};Fungsi operator {} sama dengan objek baru (), menyederhanakan operasi. Ada beberapa perbedaan dalam dua metode penulisan di atas. Yang pertama adalah "tambahkan", yaitu, dalam definisi sebelumnya, terus menambahkan atribut atau metode. Jika metode atribut dari nama yang sama sudah ada sebelumnya, itu akan ditimpa. Tipe kedua adalah "penggantian", yang berarti bahwa terlepas dari apakah sifat dan metode objek orang didefinisikan sebelumnya, metode ini akan menggantikan konten yang ditentukan sebelumnya dengan konten yang baru didefinisikan. Karena objek yang dihasilkan oleh jenis referensi adalah wilayah yang disimpan dalam memori, dan kemudian penunjuknya disimpan dalam variabel tertentu (orang), cara penulisan kedua adalah dengan menghasilkan objek baru (area memori baru), dan kemudian mengarahkan variabel orang ke area memori baru, sehingga yang sebelumnya diganti. Memahami ini sangat penting untuk pemahaman selanjutnya.
Penggunaan jenis referensi lainnya kira -kira sama, seperti jenis array, yang juga dapat digunakan untuk menghasilkan objek atau secara langsung mendefinisikannya. Setelah menghasilkan objek array, Anda dapat menyimpan konten informasi dalam format array. Selain itu, objek akan mendapatkan metode yang ditentukan dalam jenis array, seperti dorong, shift, sortir, dll., Dan Anda dapat memanggil metode ini, seperti:
var colors = []; colors.push ('merah', 'hijau'); console.log (warna);Kode di atas membuat objek tipe array melalui jenis array, kemudian memanggil metode push yang didefinisikan sebelumnya dalam jenis array, menambahkan dua nilai merah dan hijau ke objek, dan akhirnya mencetaknya di konsol dan Anda dapat melihatnya.
Metode Hubungi dan Terapkan
Kedua metode ini disediakan oleh tipe fungsi, yang berarti mereka dapat digunakan pada fungsi. Fungsi panggilan sama dengan metode Apply, yaitu dapat memperluas lingkup operasi fungsi. Perbedaannya adalah bahwa ketika menggunakan panggilan, parameter yang diteruskan ke fungsi harus terdaftar satu per satu, tetapi metode Apply tidak menggunakannya. Dengan cara ini, Anda dapat memutuskan untuk menggunakan panggilan atau berlaku sesuai dengan persyaratan fungsi Anda sendiri.
Apa arti ruang lingkup operasi fungsi ekspansi? Anda akan mengerti dengan memberi contoh.
Anda dapat memahami cara ini bahwa fungsi dibungkus dalam wadah (ruang lingkup), dan ada beberapa variabel atau hal lain dalam wadah ini. Ketika fungsi berjalan, variabel -variabel ini dipanggil, dll., Anda akan menemukan hal ini di wadah saat ini. Wadah ini benar -benar membungkus wadah yang lebih besar di luar. Jika wadah kecil saat ini tidak memilikinya, fungsi akan mencari di wadah yang lebih besar, dan seterusnya, dan temukan objek jendela kontainer terbesar. Namun, jika fungsi berjalan dalam wadah kecil saat ini, ada variabel yang sesuai, dll. Dalam wadah kecil, bahkan dalam wadah besar, fungsi tersebut masih akan menyebutnya dalam wadahnya sendiri.
Metode panggilan dan penerapan adalah untuk menyelesaikan masalah ini dan menerobos keterbatasan wadah. Adapun contoh sebelumnya:
var person = {name: "Jiangshui", sayname: function () {console.log (this.name); }};Setelah membuka konsol chrome, tempel dan jalankan, dan kemudian jalankan orang.sayname () untuk melihat
Pada saat ini, orang adalah wadah, yang menciptakan metode Sayname (fungsi). Saat mengeksekusi, itu harus dieksekusi di bawah ruang lingkup orang. Ketika dieksekusi secara langsung di bagian bawah, yaitu, eksekusi di bawah ruang lingkup jendela akan menyebabkan kesalahan tidak ditentukan karena metode Sayname tidak ditentukan di bawah jendela. Pointer di dalam ini adalah hal yang istimewa, yang menunjuk ke ruang lingkup saat ini. Arti dari ini. Nama adalah memanggil nilai nama di bawah ruang lingkup saat ini.
Selanjutnya, kami menambahkan atribut nama ke objek jendela:
window.name = "yujiangshui";
Atau secara langsung
name = "Yujiangshui";
Karena jendela adalah wadah terbesar, jendela dapat dihilangkan. Semua atribut atau variabel yang ditentukan dilampirkan ke jendela. Jika Anda tidak percaya, Anda dapat melihat:
Sekarang kami ingin menjalankan metode Sayname dalam wadah kecil orang di bawah wadah besar jendela. Kita perlu menggunakan panggilan atau berlaku untuk memperluas ruang lingkup metode Sayname. Jalankan pernyataan berikut:
orang.sayname.call (jendela);
atau
orang.sayname.call (ini);
Hasil outputnya sama. Anda juga dapat menggunakan Apply untuk melihat efeknya, karena demo ini terlalu sederhana dan tidak memerlukan parameter yang lewat, sehingga fungsi panggilan dan berlaku sepenuhnya konsisten.
Izinkan saya menjelaskan kode di atas. Sayname pertama kali merupakan instance dari jenis fungsi, yang memiliki metode panggilan dan metode Apply. Karena metode panggilan dan terapkan adalah metode fungsi, kita perlu menelepon orang.sayname.call (jendela) dengan cara ini alih -alih orang.
Kemudian parameter dari panggilan dan menerapkan metode adalah ruang lingkup (objek), menunjukkan bahwa fungsi sebelumnya dijalankan di bawah ruang lingkup yang dilewati. Setelah meneruskan objek jendela di, ini. Name dalam metode Sayname menunjuk ke window.name, sehingga ruang lingkup diperluas.
Mengapa jendela yang lewat dan ini memiliki efek yang sama? Karena lokasi menjalankan fungsi ini saat ini adalah jendela, seperti yang disebutkan sebelumnya, pointer ini menunjuk ke ruang lingkup saat ini, sehingga pointer ini menunjuk ke jendela, sehingga sama dengan jendela.