Metode ini tidak asli oleh penulis. Saya baru saja merangkumnya berdasarkan pendahulunya dan menghasilkan metode warisan JavaScript yang ringkas dan praktis.
JavaScript tradisional mewarisi rantai prototipe berdasarkan prototipe dan membutuhkan banyak operasi baru. Kode ini tidak cukup ringkas, keterbacaannya tidak terlalu kuat, dan tampaknya mudah terkontaminasi oleh rantai prototipe.
Metode warisan yang dirangkum oleh penulis ringkas dan jelas. Meskipun ini bukan cara terbaik, saya harap ini dapat menginspirasi pembaca.
Oke, jangan katakan banyak omong kosong, lihat saja kodenya, komentarnya terperinci, Anda bisa memahaminya pada pandangan pertama ~~~
Salinan kode adalah sebagai berikut:
/**
* Dibuat oleh Yang Yuanon 14-11-11.
* Jangan gunakan prototipe untuk mengimplementasikan warisan
*
*/
/**
* Menyalin objek JavaScript, hanya menyalin satu lapisan, dan hanya atribut fungsi penyalinan, bukan universal!
* @param obj objek untuk disalin
* @returns objek
*/
Object.prototype.clone = function () {
var _s = ini,
newoBj = {};
_s.each (function (kunci, nilai) {
if (object.prototype.toString.call (value) === "[Fungsi objek]") {
newoBj [key] = nilai;
}
});
mengembalikan newoBj;
};
/**
* Mengulangi semua propertinya sendiri
*
* @param Callback Callback Function. Callback akan berisi dua parameter: nama atribut utama dan nilai atribut nilai
*/
Object.prototype.each = function (callback) {
var key = "",
_THIS = ini;
untuk (kunci dalam _tic) {
if (object.prototype.hasownproperty.call (_this, key)) {
callback (tombol, _This [key]);
}
}
};
/**
* Buat subkelas
* @param ext obj, berisi metode yang perlu ditulis ulang atau diperpanjang.
* @returns objek
*/
Object.prototype.extend = function (ext) {
var child = this.clone ();
ext.each (function (tombol, value) {
anak [kunci] = nilai;
});
anak kembali;
};
/**
* Buat objek (instance)
* Argumen @param dapat menerima sejumlah parameter sebagai daftar parameter konstruktor
* @returns objek
*/
Object.prototype.create = function () {
var obj = this.clone ();
if (obj.construct) {
obj.construct.Apply (OBJ, argumen);
}
kembalikan obj;
};
/**
* Menggunakan contoh
* Gunakan metode ini untuk mewarisi, menghindari prototipe yang membosankan dan baru.
* Namun, contoh yang saya tulis hanya dapat mewarisi fungsi kelas induk (dapat dipahami sebagai metode anggota).
* Jika Anda ingin mewarisi lebih banyak konten kaya, harap tingkatkan metode klon.
*
*
*/
/**
* Hewan (orang tua)
* @type {{construct: construct, eat: eat}}
*/
var hewan = {
construct: function (name) {
this.name = name;
},
Eat: function () {
console.log ("Nama saya"+this.name+". Saya bisa makan!");
}
};
/**
* Burung (subkelas)
* Burung mengganti metode makan kelas induk dan memperluas metode terbang
* @type {subclass | void}
*/
var Bird = animal.extend ({
Eat: function (makanan) {
console.log ("Nama saya"+this.name+". Saya bisa makan"+makanan+"!");
},
fly: function () {
console.log ("Aku bisa terbang!");
}
});
/**
* Buat contoh burung
* @type {jim}
*/
var Birdjim = Bird.create ("Jim"),
BirdTom = Bird.create ("Tom");
Birdjim.eat ("Worm"); // Nama saya Jim. Saya bisa makan cacing!
Birdjim.fly (); // aku bisa terbang!
Birdtom.eat ("nasi"); // Nama saya Tom. Saya bisa makan nasi!
Birdtom.fly (); // aku bisa terbang!