Ringkasan cara menggunakan kata kunci ini dalam petua JavaScript_javascript

WBOY
Lepaskan: 2016-05-16 16:09:42
asal
902 orang telah melayarinya

Dalam JavaScript, ini tidak semestinya hanya ditemui dalam konteks kaedah objek Terdapat juga rujukan ini dalam panggilan fungsi global dan beberapa konteks lain yang berbeza.
Ia boleh menjadi objek global, objek semasa, atau sebarang objek, semuanya bergantung pada bagaimana fungsi itu dipanggil. Terdapat beberapa cara untuk memanggil fungsi dalam JavaScript: sebagai kaedah objek, sebagai fungsi, sebagai pembina, dan menggunakan apply atau call.

1. Panggil sebagai kaedah objek

Dalam JavaScript, fungsi juga merupakan objek, jadi fungsi boleh digunakan sebagai atribut objek Pada masa ini, fungsi dipanggil kaedah objek Apabila menggunakan kaedah panggilan ini, ini secara semula jadi terikat pada objek.

Salin kod Kod adalah seperti berikut:

titik var = {
x : 0,
y : 0,
moveTo : function(x, y) {
Ini.x = ini.x x; This.y = this.y y; }
};
point.moveTo(1, 1)//ini terikat pada objek semasa, iaitu objek titik


2. Panggilan sebagai fungsi

Fungsi ini juga boleh dipanggil terus, dalam hal ini terikat pada objek global. Dalam pelayar, tetingkap ialah objek global. Sebagai contoh, dalam contoh berikut: apabila fungsi dipanggil, ini terikat pada objek global, dan kemudian pernyataan tugasan dilaksanakan, yang bersamaan dengan mengisytiharkan pembolehubah global secara tersirat, yang jelas bukan perkara yang pemanggil mahu.

fungsi makeNoSense(x) {
ini.x = x; }
makeNoSense(5); x;// x telah menjadi pembolehubah global dengan nilai 5



Untuk fungsi dalaman, iaitu fungsi yang diisytiharkan dalam badan fungsi lain, kaedah mengikat objek global ini akan menyebabkan masalah lain. Kami masih mengambil objek titik yang dinyatakan sebelum ini sebagai contoh Kali ini kami berharap untuk menentukan dua fungsi dalam kaedah moveTo untuk menterjemahkan koordinat x dan y masing-masing. Hasilnya mungkin tidak dijangka Bukan sahaja objek titik tidak bergerak, tetapi terdapat dua lagi pembolehubah global x dan y.

Salin kod

Kod adalah seperti berikut: titik var = { x : 0,
y : 0,
moveTo : function(x, y) {
// Fungsi dalaman
var moveX = function(x) {
This.x = x;//Di manakah ini terikat?
};
// Fungsi dalaman
var moveY = function(y) {
This.y = y; // Di mana ini terikat?
};

moveX(x); moveY(y);
}
}; point.moveTo(1, 1); point.x; //==>0

point.y; //==>0
x; //==>1
y; //==>1



Ini adalah kecacatan reka bentuk dalam JavaScript Kaedah reka bentuk yang betul ialah fungsi dalaman ini harus diikat pada objek yang sepadan dengan fungsi luarnya Untuk mengelakkan kecacatan reka bentuk ini, pengaturcara JavaScript pintar menghasilkan penggantian berubah Kaedah, mengikut konvensyen, pembolehubah biasanya dinamakan itu.


Salin kod


Kod adalah seperti berikut: titik var = { x : 0, y : 0, moveTo : function(x, y) {
var itu = ini; // Fungsi dalaman
var moveX = function(x) {
Itu.x = x; };
// Fungsi dalaman
var moveY = function(y) {
That.y = y;
}  
MoveX(x); MoveY(y);
}  
};
point.moveTo(1, 1); point.x; //==>1
point.y; //==>1

Panggil sebagai pembina

JavaScript menyokong pengaturcaraan berorientasikan objek Tidak seperti bahasa pengaturcaraan berorientasikan objek arus perdana, JavaScript tidak mempunyai konsep kelas, tetapi menggunakan warisan berdasarkan prototaip. Sejajar dengan itu, pembina dalam JavaScript juga sangat istimewa Jika ia tidak dipanggil dengan baru, ia adalah sama seperti fungsi biasa. Sebagai konvensyen lain, pembina bermula dengan huruf besar untuk mengingatkan pemanggil supaya memanggil mereka dengan cara yang betul. Jika dipanggil dengan betul, ini terikat pada objek yang baru dibuat.

Salin kod Kod adalah seperti berikut:

fungsi Titik(x, y){
Ini.x = x; This.y = y;
}

Gunakan permohonan atau hubungi untuk membuat panggilan

Mari kita ulangi sekali lagi bahawa dalam JavaScript, fungsi juga merupakan objek, dan objek mempunyai kaedah memohon dan panggilan adalah kaedah objek fungsi. Kedua-dua kaedah ini sangat berkuasa Mereka membenarkan menukar konteks di mana fungsi itu dilaksanakan, iaitu, objek yang terikat. Banyak teknik dan perpustakaan dalam JavaScript menggunakan kaedah ini. Mari lihat contoh konkrit:


Salin kod Kod adalah seperti berikut:
fungsi Titik(x, y){
Ini.x = x; This.y = y;
This.moveTo = function(x, y){
Ini.x = x; This.y = y;
}
}

var p1 = Titik baharu(0, 0); var p2 = {x: 0, y: 0}; p1.moveTo(1, 1); p1.moveTo.apply(p2, [10, 10]);

Dalam contoh di atas, kami menggunakan pembina untuk menghasilkan objek p1, yang juga mempunyai kaedah moveTo kami menggunakan literal objek untuk mencipta objek lain p2, dan kami melihat bahawa menggunakan apply boleh menggunakan kaedah p1 hingga p2 pada; , kali ini ini juga terikat dengan objek p2. Panggilan kaedah lain juga mempunyai fungsi yang sama, tetapi perbezaannya ialah parameter terakhir tidak diluluskan secara seragam sebagai tatasusunan, tetapi secara berasingan.



Salin kod


Kod adalah seperti berikut:

}
//2.ini ialah tetingkap, maka ia adalah panggilan global
jika(ini==tetingkap){
alert('panggilan biasa');
}
else{//3 Jika tidak, ia dipanggil sebagai kaedah objek lain
alert('dipanggil oleh ' this.constructor);
}
}
Foo();//Panggilan fungsi global
Foo.call(new Object());//Panggil sebagai kaedah ahli objek objek
new Foo();//Dipanggil oleh operator baharu untuk melaksanakan pembinaan objek


Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan