Rumah > hujung hadapan web > tutorial js > Bolehkah saya Menggantikan \'ini\' dengan Nama Literal Objek dalam Fungsi Literal Objek JavaScript?

Bolehkah saya Menggantikan \'ini\' dengan Nama Literal Objek dalam Fungsi Literal Objek JavaScript?

DDD
Lepaskan: 2024-11-29 01:02:16
asal
613 orang telah melayarinya

Can I Replace 'this' with the Object Literal Name in JavaScript Object Literal Functions?

Kekaburan dalam Rujukan Fungsi Literal Objek: Penggantian 'ini' dengan Literal Objek

Persoalan penting timbul apabila bekerja dengan literal objek: boleh fungsi dalam objek merujuk kepada objek induknya menggunakan nama literal dan bukannya 'ini'? Walaupun ini nampaknya berkesan, ia boleh membawa kepada akibat yang tidak diingini.

Pertimbangkan contoh berikut:

var obj = {
    key1: "it",
    key2: function() {return this.key1 + " works!"}
};
alert(obj.key2());
Salin selepas log masuk

Kod ini mencetuskan ralat konsol kerana 'ini' dalam fungsi key2 merujuk kepada global objek (tetingkap) bukannya objek obj. Ralat ini boleh dielakkan dengan menggunakan literal objek secara langsung dalam fungsi:

var obj = {
    key1: "it",
    key2: function() {return obj.key1 + " works!"}
};
alert(obj.key2());
Salin selepas log masuk

Walau bagaimanapun, pendekatan ini tidak terlepas daripada isu. Mari kita analisa senario tambahan deux:

  1. Panggilan Fungsi Luaran:
var obj = {
    key1: "it",
    key2: function() { return this.key1 + " works!" }
};
var func = obj.key2;
alert(func()); // error
Salin selepas log masuk

Memanggil fungsi key2 sebagai fungsi kendiri (bukan sebagai kaedah of obj) memecahkan rujukan 'ini' dan boleh menyebabkan yang tidak dijangka keputusan.

  1. Pertukaran Rujukan:
var obj = {
    key1: "it",
    key2: function() { return obj.key1 + " works!" }
};
var newref = obj;
obj = { key1: "something else"; };
alert(newref.key2()); // "something else works"
Salin selepas log masuk

Menukar rujukan obj daripada rujukan sekunder boleh membatalkan rujukan dalaman fungsi key2 kepada yang betul objek.

Untuk menangani masalah yang berpotensi ini, beberapa penyelesaian adalah tersedia:

  • ES6 dengan const: Halang mutasi objek yang boleh memecahkan rujukan 'ini'.
  • Penutupan ES5: Bungkus objek dalam fungsi untuk mengelakkan rujukan luaran perlanggaran.
  • Mengikat: Ikat fungsi key2 pada objek obj untuk memastikan rujukan 'ini' sentiasa betul.

Memilih penyelesaian yang paling sesuai bergantung pada konteks khusus dan kemungkinan menghadapi isu yang digariskan. Namun begitu, adalah penting untuk mengetahui kemungkinan perangkap dan mengambil langkah berjaga-jaga yang perlu apabila bekerja dengan fungsi literal objek.

Atas ialah kandungan terperinci Bolehkah saya Menggantikan \'ini\' dengan Nama Literal Objek dalam Fungsi Literal Objek JavaScript?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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