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());
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());
Walau bagaimanapun, pendekatan ini tidak terlepas daripada isu. Mari kita analisa senario tambahan deux:
var obj = { key1: "it", key2: function() { return this.key1 + " works!" } }; var func = obj.key2; alert(func()); // error
Memanggil fungsi key2 sebagai fungsi kendiri (bukan sebagai kaedah of obj) memecahkan rujukan 'ini' dan boleh menyebabkan yang tidak dijangka keputusan.
var obj = { key1: "it", key2: function() { return obj.key1 + " works!" } }; var newref = obj; obj = { key1: "something else"; }; alert(newref.key2()); // "something else works"
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:
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!