Misalnya, tentukan dua metode panggilan untuk suatu fungsi:
Salinan kode adalah sebagai berikut:
fungsi getInfo () {
var info = {
Pesan: "Pesan"
};
pengembalian info;
}
1. Var info1 = getInfo ();
2. Var info2 = new getInfo ();
Apakah ada perbedaan antara 1 dan 2? Apakah nilainya diperoleh dengan info1 dan info2 sama?
Tipe pertama sangat sederhana dan banyak menggunakan, yaitu untuk menjalankan fungsi, menerima nilai pengembalian fungsi dan menetapkannya ke objek info1;
Situasi kedua umumnya jarang terjadi. Pertama -tama, suatu fungsi juga merupakan objek. Ini dapat dipakai jika objek pasti (instance sebenarnya memanggil konstruktor objek untuk menginisialisasi objek). Semua kasus kedua adalah memanggil konstruktor objek fungsi getInfo dan menerima instance yang diinisialisasi oleh konstruktor (biasanya ini). Hal yang lebih istimewa tentang fungsi adalah bahwa jika konstruktor menampilkan nilai pengembalian, nilai pengembalian akan diganti dengan nilai pengembalian. Jadi dalam kasus kedua, GetInfo baru adalah memanggil konstruktor (konstruktor fungsi adalah definisi itu sendiri) dan menerima info nilai pengembalian.
aplikasi:
1. Misalnya, HTML mendefinisikan objek DOM: <div id = "domid"> </div>, kode JS adalah sebagai berikut:
Salinan kode adalah sebagai berikut:
fungsi $ (domid) {
var dom = document.getElementById (domId);
return dom;
}
window.onload = function () {
var dom1 = baru $ ("domid");
var dom2 = $ ("domid");
peringatan (dom1 == DOM2);
}
Maka pesan prompt peringatan akan ditampilkan True. Alasan mengapa saya menggunakan $ karena nama fungsi adalah karena saat menggunakan fungsi ini, apakah itu sedikit seperti gaya jQuery? Faktanya, definisi gaya fungsi ini diterapkan pada konstruktor jQuery. Apakah Anda menggunakan baru atau memanggil fungsi secara langsung, nilai yang dikembalikan adalah sama.
2. Tentukan objek XMLHTTPREQUEST yang kompatibel (Contoh ini dikutip dari bagian 18.1 dari panduan JavaScript otoritatif)
Semua orang tahu bahwa browser yang berbeda dapat mendukung komunikasi yang tidak sinkron secara berbeda. IES awal menggunakan metode ActiveX. Kode berikut mendefinisikan objek XMLHTTPREQuest yang kompatibel:
Salinan kode adalah sebagai berikut:
if (window.xmlHttpRequest === tidak terdefinisi) {
window.xmlHttpRequest = function () {
mencoba {
// Jika tersedia, gunakan objek ActiveX versi terbaru
return new ActiveXObject ("msxml2.xmlhttp.6.0");
} catch (ex1) {
mencoba {
return new ActiveXObject ("msxml2.xmlhttp.3.0");
} catch (ex2) {
Lempar kesalahan baru ("XMLHTTPREQUEST tidak didukung")
}
}
}
}
Dengan cara ini, Anda dapat secara langsung mendefinisikannya melalui var xhr = xmlhttpRequest baru (), terlepas dari apakah itu IE browser atau browser firefox.