Di bawah ruang lingkup global
ini;
Saat menggunakan ini dalam ruang lingkup global, itu menunjuk ke objek global.
Berikut adalah pengantar terperinci untuk objek global:
Objek global adalah objek yang telah dibuat sebelum memasuki konteks eksekusi apa pun;
Hanya ada satu salinan objek ini, dan propertinya dapat diakses di mana saja dalam program. Siklus hidup objek global berakhir pada saat program keluar.
Pada tahap penciptaan awal objek global, matematika, string, tanggal, parseint diinisialisasi sebagai atributnya sendiri, dll., Dan objek tambahan lainnya juga dapat dibuat sebagai atribut (yang dapat menunjuk pada objek global itu sendiri). Misalnya, di DOM, properti jendela dari objek global dapat merujuk pada objek global itu sendiri.
Jadi itu sama dengan ini. Window di konsol.
Saat memanggil suatu fungsi
foo ();
Di sini, ini juga menunjuk pada objek global.
Saat memanggil metode
test.foo ();
Dalam contoh ini, ini akan menunjuk ke objek uji.
Saat memanggil konstruktor
foo baru ();
Fungsi digunakan dengan kata kunci baru saat dipanggil, yang kami sebut konstruktor. Pada saat ini, dalam fungsi, ini menunjuk pada objek yang baru dibuat.
Ketika diatur secara eksplisit
fungsi foo (a, b, c) {} // var bar = {}; foo.Apply (bar, [1, 2, 3]); // Array akan diperluas ke di bawah FOO.call (bar, 1, 2, 3); // menghasilkan a = 1, b = 2, c = 3Saat menggunakan metode function function.
Oleh karena itu, tidak seperti aturan saat memanggil fungsi, ini dalam contoh di atas poin ke bar.
Berikut adalah metode panggilan dan terapkan:
Metode panggilan :
Sintaks: Call ([Thisobj [, arg1 [, arg2 [, [, .Argn]]]]])
Definisi: Panggil metode objek untuk mengganti objek saat ini dengan objek lain.
Terapkan metode :
Sintaks: Terapkan ([Thisobj [, Argarray]])
Definisi: Terapkan satu metode objek tertentu dan ganti objek saat ini dengan objek lain.
Di sini kita perlu mencatat bahwa ini tidak dapat digunakan untuk menunjuk ke objek itu sendiri ketika objek secara harfiah dinyatakan. sebagai berikut:
var obj = {me: this}Di sini, ini tidak akan menunjukkan OBJ, dan penerapannya terbatas pada lima situasi di atas.
Meringkaskan
Meskipun situasi di atas sebagian besar bermakna, ini dalam kasus kedua (mis. Saat memanggil fungsi) sebenarnya jarang berguna, yang dianggap kesalahan lain dalam desain JavaScript.
Foo.method = function () {function test () {// Ini diatur ke objek global} test ();}Seperti yang kami sebutkan di atas, ini di sini akan menunjuk pada objek global, bukan fungsi foo.
Untuk mendapatkan cara untuk menunjuk pada tes, kita perlu membuat variabel lokal di dalam metode yang menunjuk ke foo.
Foo.method = function () {var that = this; function test () {// Gunakan itu alih -alih ini di sini} test ();}Itu hanya nama variabel normal, tetapi sering digunakan untuk menunjuk ke eksternal ini.
Ada hal menarik lain yang terkait dengan alias fungsi, yaitu, ketika metode ditetapkan ke variabel.
var test = someObject.methodtest; test ();
Dalam contoh di atas, tes akan diperlakukan sebagai fungsi normal, jadi menurut kasus kedua (mis. Ketika suatu fungsi disebut), ini di dalamnya akan menunjuk ke variabel global, bukan beberapa hal.
Meskipun ikatan yang terlambat ini tampaknya merupakan keputusan yang buruk pada awalnya, ini sebenarnya adalah dasar dari prototipe warisan.
function foo () {} foo.prototype.method = function () {}; function bar () {} bar.prototype = foo.prototype; bar baru (). Method ();Pada titik ini, ketika metode dipanggil, itu akan menunjuk ke objek instance batang.