Walaupun percubaan menggunakan kedua-dua kaedah alias dan pembungkus fungsi, aliasing document.getElementById gagal dalam Firefox, Chrome dan juga tetingkap nyahpepijat. Ralat dilemparkan dalam Firefox, manakala "Invokasi haram" berlaku dalam Chrome. Selain itu, operasi ini berfungsi dalam Internet Explorer 8.
Selepas analisis yang mendalam, isunya terletak pada cara fungsi JavaScript dilekatkan secara longgar pada objek dan berinteraksi dengan skop.
Apabila memanggil fungsi JavaScript, jurubahasa memberikan skop dan menghantarnya kepada fungsi. Jika fungsi menggunakan ini untuk merujuk kepada skop, nilai ini akan menjadi skop yang telah diluluskan.
Walau bagaimanapun, anda boleh menentukan skop secara manual menggunakan kaedah guna, mengatasi skop lalai yang diberikan oleh penterjemah.
Aliasing document.getElementById sebagai $ menghadapi ralat kerana apabila anda memanggil $('someElement'), skop ditetapkan kepada objek tetingkap, bukan dokumen objek. Akibatnya, jika pelaksanaan getElementById menjangkakan skop adalah dokumen, fungsi tersebut akan gagal.
Untuk menyelesaikan isu ini, anda boleh menggunakan $.apply(document, [' someElement']) untuk menetapkan skop secara eksplisit kepada objek dokumen.
Kejayaan pengalian yang tidak dijangka dalam Internet Explorer mungkin dikaitkan dengan fakta bahawa dalam IE , objek tetingkap adalah bersamaan dengan objek dokumen. Jika demikian keadaannya, aliasing harus berfungsi dengan betul dalam IE.
Untuk menggambarkan lebih lanjut isu ini, pertimbangkan fungsi Orang berikut:
function Person(birthDate) { this.birthDate = birthDate; this.getAge = function() { return new Date().getFullYear() - this.birthDate.getFullYear(); }; this.getAgeSmarter = function() { return this.getAge(); }; this.getAgeSmartest = function() { return (this.constructor == Person ? this : self).getAge(); }; }
Dengan dua contoh kelas Orang yang dibuat, yogi dan Yogi yang lain, berikut ialah output yang sepadan:
Contoh menunjukkan kerumitan skop dan kepentingan menggunakan kaedah guna semasa mengaliaskan fungsi.
Atas ialah kandungan terperinci Mengapa Fungsi Aliasing JavaScript Menyebabkan Ralat dalam Sesetengah Pelayar Tetapi Bukan Yang Lain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!