Empat cara untuk menggunakan ini dalam kemahiran javascript_javascript

WBOY
Lepaskan: 2016-05-16 16:00:02
asal
1048 orang telah melayarinya

ini

Apabila fungsi dilaksanakan, ini sentiasa menunjuk kepada objek yang dipanggil fungsi itu. Untuk menentukan di mana titik ini, anda sebenarnya perlu menentukan milik siapa fungsi ini.

Dalam buku "The Essence of JavaScript Language", senario di mana ini muncul dibahagikan kepada empat kategori secara ringkas:

Jika ada objek, tuding pada objek yang memanggil
Tuding pada objek global tanpa memanggil objek
Dibina dengan baharu, ia menunjuk kepada objek baharu
Tukar rujukan ini melalui apply atau call atau bind.

1) Apabila fungsi mempunyai objek yang dimiliki: tuding ke objek yang dimiliki

Apabila fungsi mempunyai objek yang menjadi miliknya, ia biasanya dipanggil melalui ungkapan , dalam keadaan ini secara semula jadi ia menunjuk ke objek yang dimilikinya. Contohnya, contoh berikut:

var myObject = {value: 100};
myObject.getValue = function () {
 console.log(this.value); // 输出 100

 // 输出 { value: 100, getValue: [Function] },
 // 其实就是 myObject 对象本身
 console.log(this);

 return this.value;
};

console.log(myObject.getValue()); // => 100

Salin selepas log masuk

getValue() tergolong dalam objek myObject dan dipanggil .

2) Fungsi tidak mempunyai objek pemilikan: menunjuk ke objek global

var myObject = {value: 100};
myObject.getValue = function () {
 var foo = function () {
  console.log(this.value) // => undefined
  console.log(this);// 输出全局对象 global
 };

 foo();

 return this.value;
};

console.log(myObject.getValue()); // => 100

Salin selepas log masuk

Dalam blok kod di atas, walaupun fungsi foo ditakrifkan dalam badan fungsi getValue, ia sebenarnya bukan milik getValue mahupun myObject. foo tidak terikat pada mana-mana objek, jadi apabila dipanggil, penunjuk ini menunjuk ke objek global.

Dikatakan bahawa ini adalah kesilapan reka bentuk.

3) ini dalam pembina: menunjuk ke objek baharu

Dalam js, kami memanggil pembina melalui kata kunci baharu, dan ini akan terikat pada objek baharu.

var SomeClass = function(){
 this.value = 100;
}

var myCreate = new SomeClass();

console.log(myCreate.value); // 输出100

Salin selepas log masuk

Dengan cara ini, dalam js, tiada sempadan yang jelas antara pembina, fungsi biasa, kaedah objek dan penutupan. Sempadan semuanya ada dalam hati manusia.

4) gunakan dan panggil panggilan dan ikat ikatan: tuding ke objek terikat

Kaedah apply() menerima dua parameter Yang pertama ialah skop di mana fungsi berjalan, dan satu lagi ialah tatasusunan parameter (argumen).

Maksud parameter pertama kaedah call() adalah sama seperti kaedah apply(), kecuali parameter lain perlu disenaraikan satu demi satu.

Ringkasnya, kaedah panggilan adalah lebih dekat dengan cara biasa kita memanggil fungsi, manakala aplikasi memerlukan kita menghantar tatasusunan dalam bentuk Tatasusunan kepadanya. Mereka boleh ditukar ganti.

var myObject = {value: 100};

var foo = function(){
 console.log(this);
};

foo(); // 全局变量 global
foo.apply(myObject); // { value: 100 }
foo.call(myObject); // { value: 100 }

var newFoo = foo.bind(myObject);
newFoo(); // { value: 100 }
Salin selepas log masuk

Itu sahaja kandungan artikel ini, saya harap anda semua menyukainya.

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!