في المقالة السابقة قمت بكتابة وظيفة الأداة $class، وهذه المقالة سوف تقوم بتحسينها على النحو التالي. تنفيذ الوظائف التالية
1. الميراث
2. عندما ترث فئة فرعية من فئة أصل، فإنها لا ترث السمات الخاصة للفئة الأصل.
انسخ رمز الكود كما يلي:
/**
* @param {String} اسم الفئة
* @param {String/Function} superCls
* @param {Function} classImp
*/
الدالة $class(className, superCls, classImp){
if(superCls === '') superCls = Object;
وظيفة كلاز () {
إذا (نوع this.init == "وظيفة"){
this.init.apply(this,حجج);
}
}
var p = clazz.prototype = new superCls();
var _super = superCls.prototype;
window[className] = clazz;
classImp.apply(p, [_super]);
}
اكتب أولاً فئة الوالدين
انسخ رمز الكود كما يلي:
/**
* شخص من فئة الوالدين
*/
$class('شخص','',وظيفة(){
// عمر السمة الخاصة
عمر فار؛
this.init = وظيفة(ن, أ){
// اسم السمة العامة
this.name = n;
// تهيئة الملكية الخاصة
العمر = أ؛
};
this.getName = function(){
إرجاع هذا. الاسم؛
};
this.setName = function(name){
this.name = name;
}
this.getAge = function(){
سن العودة؛
};
this.setAge = وظيفة(أ){
العمر = أ؛
};
});
اكتب فئة فرعية، ترث من الشخص
انسخ رمز الكود كما يلي:
$class("رجل",شخص, وظيفة(supr){
مدرسة فار؛
this.init = function(n, a, s){
subr.init.apply(this, [n,a]);
المدرسة = ق؛
}
this.getSchool = function(){
العودة إلى المدرسة؛
};
this.setSchool = الوظيفة(الوظائف){
المدرسة = ق؛
};
});
جديد مثيل فئة فرعية
انسخ رمز الكود كما يلي:
var m = new Man('tom', 25, 'pku');
console.log(m.name); // يرث توم اسم السمة الشائعة للفئة الأصلية ويمكنه استخدام عامل النقطة مباشرة للحصول عليه.
console.log(m.age); // غير محدد لا يمكن الحصول على عمر الملكية الخاصة للفئة الأصلية مباشرة باستخدام عامل النقطة
console.log(m.getAge()); // 25 يمكن الحصول على عمر السمة الخاصة من خلال الطريقة العامة getAge للفئة الأصلية
console.log(m.school); // غير محدد لا يزال من غير الممكن الحصول على الممتلكات الخاصة للإنسان من خلال عامل النقطة
console.log(m.getSchool()); // pku تحصل على المدرسة الخاصة من خلال طريقة getSchool()