Sebelum ini, saya agak keliru tentang pewarisan prototaip dan carian pengecam dalam rantaian prototaip Javascript,
Contohnya, kod berikut:
fungsi Foo() {};
var foo = Foo baharu();
Foo.prototype.label = "laruence";
alert(foo.label); //output: larience
alert(Foo.label);//output: undefined
Saya melihat gambar berikut hari ini:
Susun atur objek Javascript
Juga, lihat dalam Hierarki Objek Javascript:
Prototaip hanya digunakan untuk sifat yang diwarisi oleh objek/kejadian yang dicipta oleh fungsi itu sendiri tidak menggunakan prototaip yang berkaitan.
Dalam erti kata lain, prototaip objek fungsi tidak menjejaskan proses carian rantai prototaip,
Saya temui hari ini di bawah firefox (kerana firefox mendedahkan [[prototaip]] melalui __proto__), perkara yang sebenarnya mengambil bahagian dalam carian pengecam ialah __proto__ objek fungsi,
fungsi Foo() {};
var foo = Foo baharu();
Foo.__proto__.label = "laruence";
alert(Foo.label); //output: larience
alert(foo.label);//output: undefined
Dan, jelas sekali:
fungsi Foo() {};
alert(Foo.__proto__ === Foo.prototype); //output: false
Selain itu, ia juga menerangkan,
alert(Object.forEach); // tidak ditentukan
Function.prototype.forEach = fungsi(objek, blok, konteks) {
untuk (kunci var dalam objek) {
Jika (jenis this.prototype[key] == "undefined") {
block.call(konteks, objek[kunci], kunci, objek);
}
}
};
alert(Object.forEach);
alert(Function.forEach);
alert(Object.forEach === Function.forEach); // true
Kenyataan: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