هذه الطريقة ليست أصلية من قبل المؤلف. لقد لخصت ذلك فقط بناءً على الأسلاك وتوصلت إلى طريقة ميراث JavaScript موجزة وعملية.
يرث JavaScript التقليدي سلاسل النموذج الأولي على أساس النماذج الأولية ويتطلب الكثير من العمليات الجديدة. الكود غير موجز بما فيه الكفاية ، فإن قابلية القراءة ليست قوية للغاية ، ويبدو أنها ملوثة بسهولة بواسطة سلاسل النموذج الأولي.
طريقة الميراث التي يلخصها المؤلف موجزة وواضحة. على الرغم من أنها ليست أفضل طريقة ، آمل أن تتمكن من إلهام القراء.
حسنًا ، لا تقل الكثير من الهراء ، فقط انظر إلى الكود ، والتعليقات مفصلة ، يمكنك فهمها للوهلة الأولى ~~~
نسخة الكود كما يلي:
/**
* تم إنشاؤه بواسطة يانغ يوانون 14-11-11.
* لا تستخدم النموذج الأولي لتنفيذ الميراث
*
*/
/**
* نسخ كائن JavaScript ، ونسخ طبقة واحدة فقط ، وسمات وظيفة النسخ فقط ، وليست عالمية!
* كائن Param OBJ لنسخه
* @كائن RETURNS
*/
Object.prototype.clone = function () {
var _s = هذا ،
newObj = {} ؛
_s.each (وظيفة (مفتاح ، قيمة) {
if (object.prototype.toString.call (value) === "[function]") {
newObj [مفتاح] = القيمة ؛
}
}) ؛
إرجاع NewObj ؛
} ؛
/**
* تكرار من خلال جميع خصائصها الخاصة
*
* param وظيفة رد الاتصال. سيحتوي رد الاتصال على معلمتين: اسم سمة المفتاح وقيمة سمة القيمة
*/
Object.prototype.each = دالة (رد الاتصال) {
var key = "" ،
_ هذا = هذا ؛
لـ (المفتاح في _ هذا) {
if (object.prototype.hasownproperty.call (_this ، المفتاح)) {
رد الاتصال (مفتاح ، _ هذا [المفتاح]) ؛
}
}
} ؛
/**
* إنشاء فئات فرعية
* param ext obj ، يحتوي على طرق يجب إعادة كتابة أو تمديدها.
* @كائن RETURNS
*/
Object.Prototype.Extend = Function (ext) {
var child = this.clone () ؛
Ext.each (الوظيفة (المفتاح ، القيمة) {
الطفل [المفتاح] = القيمة ؛
}) ؛
إعادة الطفل
} ؛
/**
* إنشاء كائن (مثيل)
* يمكن أن تقبل الوسيطات param أي عدد من المعلمات كقائمة من معلمات المنشئ
* @كائن RETURNS
*/
Object.prototype.create = function () {
var obj = this.clone () ؛
if (obj.construct) {
obj.construct.apply (OBJ ، الحجج) ؛
}
إرجاع OBJ ؛
} ؛
/**
* مثال useage
* استخدم هذه الطريقة للوراثة ، وتجنب النموذج الأولي الشاق والجديد.
* ومع ذلك ، فإن المثال الذي كتبته لا يمكن أن يرث سوى وظيفة الفئة الأصل (يمكن فهمها كطريقة عضو).
* إذا كنت تريد أن ترث محتوى أكثر ثراءً ، فيرجى تحسين طريقة الاستنساخ.
*
*
*/
/**
* الحيوانات (الوالد)
* type {{construct: construct ، eat: eat}}
*/
var animal = {
بناء: وظيفة (اسم) {
this.name = name ؛
} ،
تناول الطعام: وظيفة () {
console.log ("اسمي"+this.name+". يمكنني تناول الطعام!") ؛
}
} ؛
/**
* الطيور (الفئة الفرعية)
* تجاوزت الطيور طريقة تناول الطعام الفئة الأصل وتمديد طريقة الطيران
* type {الفئة الفرعية | void}
*/
var bird = Animal.Extend ({
تناول الطعام: وظيفة (طعام) {
console.log ("اسمي"+this.name+". يمكنني تناول"+طعام+"!") ؛
} ،
Fly: Function () {
console.log ("يمكنني الطيران!") ؛
}
}) ؛
/**
* إنشاء مثيل الطيور
* type {jim}
*/
var birdjim = bird.create ("Jim") ،
BirdTom = bird.create ("tom") ؛
birdjim.eat ("الدودة") ؛ // اسمي جيم. أستطيع أن آكل الدودة!
birdjim.fly () ؛ //يمكنني الطيران!
birdtom.eat ("الأرز") ؛ // اسمي توم. أستطيع أن آكل الأرز!
birdtom.fly () ؛ //يمكنني الطيران!