وضع وضع النموذج الأولي
ملاحظة: استخدم مثيلات النموذج الأولي لنسخ وإنشاء كائنات جديدة قابلة للتخصيص ؛ بالنسبة للكائنات التي تم إنشاؤها حديثًا ، لا تحتاج إلى معرفة العملية المحددة لإنشاء الكائن الأصلي ؛
الإجراء: النموذج الأولي => new protoexam => استنساخ إلى كائن جديد ؛
استخدم الكود ذي الصلة:
نسخة الكود كما يلي:
وظيفة النموذج الأولي () {
this.name = '' ؛
this.age = '' ؛
this.sex = '' ؛
}
النموذج الأولي. النموذج
إرجاع "المعلومات الشخصية ، الاسم:"+this.name+"، العمر:"+this.age+'، الجنس:'+this.sex+'<br />' ؛
}
الآن مطلوب محتوى معلومات شخصية اثنين أو أكثر:
نسخة الكود كما يلي:
var proto = new OrityType () ؛
var person1 = object.create (proto) ؛
person1.name = 'xiao ming' ؛
person1.sex = 'ذكر' ؛
person1.age = 35 ؛
person1.userInfo () ؛
//
var person2 = object.create (proto) ؛
person2.name = 'xiaohua' ؛
person2.Sex = 'Female' ؛
person2.age = 33 ؛
person2.UserInfo () ؛
عائدات الإخراج:
نسخة الكود كما يلي:
المعلومات الشخصية ، الاسم: شياو مينغ ، العمر: 35 ، الجنس: ذكر
المعلومات الشخصية ، الاسم: Xiaohua ، العمر: 33 ، الجنس: أنثى
يستخدم وضع النموذج الأولي بشكل عام للهياكل التجريدية المعقدة ، لكن تكوين المحتوى متشابه ، ويمكن تخصيص محتوى مجردة ، ويتطلب إنشاء جديد فقط تعديلًا طفيفًا على كائن الإنشاء الأصلي لتلبية المتطلبات ؛
كائن. تعليمات
1>. التعريف: إنشاء كائن يحدد كائن النموذج الأولي ويمكن أن يحتوي على خصائص مخصصة اختيارية ؛
2> object.create (proto [، properties]) ؛ اختياري ، يستخدم لتكوين خصائص كائنات جديدة ؛
نسخة الكود كما يلي:
1. proto: لإنشاء نموذج أولي لكائن جديد ، يجب أن يكون فارغًا ؛ هذا البروتو ذو قيمة فقط إذا تم إنشاؤه [جديد] أو كائن.
2. الخصائص: اختياري ، الهيكل:
{
Propfield: {
القيمة: 'val' | {} | function () {} ،
قابل للكتابة: صحيح | خطأ ،
التعداد: صحيح | خطأ ،
قابل للتكوين: صحيح | خطأ ،
الحصول على: function () {return 10} ،
المجموعة: الدالة (القيمة) {}
}
}
السمات المخصصة لها السمات الأربع التالية:
القيمة: قيمة السمة المخصصة ؛
قابلة للكتابة: ما إذا كانت قيمة هذا العنصر قابلة للتحرير ، تكون الافتراضية خاطئة ، وعندما صحيح ، يمكن تعيين OBJ.Prodfield ؛ خلاف ذلك القراءة فقط ؛
التعداد: التعداد ؛
قابل للتكوين: قابل للتكوين ؛
يمكن أن يشمل أيضًا مجموعة ، الحصول على طرق ملحق ؛
من بينها ، [مجموعة ، الحصول على] لا يمكن أن تظهر في نفس الوقت مثل القيمة والقابلة للكتابة ؛
1. إنشاء فئة كائن النموذج الأولي:
نسخة الكود كما يلي:
وظيفة protoclass () {
this.a = 'protoclass' ؛
this.c = {} ؛
this.b = function () {
}
}
إنشاء طريقة نموذجية:
نسخة الكود كما يلي:
protoclass.prototype.amethod = function () {
//this.a ؛
//this.b () ؛
إعادة هذا.
}
كيفية استخدام
1. إنشاء كائن مع protoclass.prototype ؛
نسخة الكود كما يلي:
var obj1 = object.create (protoclass.prototype ، {
foo: {value: 'obj1' ، القابلة للكتابة: صواب}
})
OBJ1 لديه طريقة النموذج الأولي protoclass.
نسخة الكود كما يلي:
OBJ1.AMETHOD () ؛
// سيتم إخراج الطريقة غير المحددة ليكون متاحًا ، ولا يمكن الوصول إلى عضو protoclass
ومع ذلك ، لا يمكن لهذه الطريقة تنفيذ خصائص الأعضاء من A ، B ، C تحت protoclass:
2. استخدم protoclass instanted كنموذج أولي:
نسخة الكود كما يلي:
var proto = new protoclass () ؛
var obj2 = object.create (proto ، {
foo: {value: 'obj2'}
}) ؛
تم إنشاء OBJ2 الذي تم إنشاؤه بهذه الطريقة جميع سمات الأعضاء A و B و C و Amethod Ortype Method of Protoclass ؛ ويضيف سمة بيانات القراءة فقط ؛
نسخة الكود كما يلي:
OBJ2.A ؛ // protoclass
OBJ2.C: // [كائن]
OBJ2.B () ؛ //
OBJ2.AMETHOD () ؛ // protoclass
OBJ2.FOO ؛ // OBJ2
3. ميراث الفئة الفرعية:
نسخة الكود كما يلي:
وظيفة الفئة الفرعية () {
}
subcleass.prototype = object.create (protoclass.prototype ، {
foo: {value: 'Sub -Ster'}
}) ؛
Subcleass.Prototype.SubMethod = function () {
إرجاع هذا this.foo ؛
}
يمكن مورث هذه الطريقة من طريقة protoclass 'Amethod وتنفيذها ؛
نسخة الكود كما يلي:
var func = فئة فرعية جديدة () ؛
func.amethod () ؛ // undefined ، لا يمكن قراءة خصائص protoclass الأعضاء ، a ، b ، c
func.submethod () ؛ // الفئة الفرعية
لتمكين الفئة الفرعية من قراءة خصائص الأعضاء من protoclass ، يجب تغيير الفئة الفرعية:
نسخة الكود كما يلي:
وظيفة الفئة الفرعية ()
{
protoclass.call (هذا) ؛
}
// رمز آخر ؛
يمكن لهذه الطريقة الحصول على خصائص العضو وطرق النموذج الأولي للبروتوكلاس ؛:
نسخة الكود كما يلي:
var func = فئة فرعية جديدة () ؛
func.amethod () ؛ // protoclass
func.submethod () ؛ // protoclass
هناك طريقة أخرى تتمثل في استخدام كائن protoclass الذي تم إنشاءه كنموذج أولي للفئة الفرعية ؛
نسخة الكود كما يلي:
var proto = new protoclass () ؛
وظيفة الفئة الفرعية () {
}
subcleass.prototype = object.create (proto ، {
foo: {value: 'Sub -Ster'}
}) ؛
وبهذه الطريقة ، بعد إنشاء الفئة الفرعية ، يمكنك الحصول على جميع خصائص Protoclass وطرق النموذج الأولي ، وإنشاء سمة بيانات للقراءة فقط FOO ؛
نسخة الكود كما يلي:
var func = فئة فرعية جديدة () ؛
func.foo ؛ // فئة فرعية
func.a ؛ // protoclass
func.b () ؛ //
func.c ؛ //[هدف]
func.amethod () ؛ // protoclass
4. الطريقة الأخرى لإنشاء الميراث هي نفس الكائن.
نسخة الكود كما يلي:
وظيفة الفئة الفرعية () {
this.foo = 'فئة فرعية' ؛ // ولكن يمكن قراءتها وكتابتها هنا
}
subcleass.prototype = new protoclass () ؛
Object.create تعليمات ذات صلة
يتم استخدام Object.Create لإنشاء كائن جديد. عندما يكون كائنًا ، يكون النموذج الأولي فارغًا ، وتأثيره يتسق مع كائن جديد () ؛ أو {}؛
عندما تكون الوظيفة ، تكون الوظيفة هي نفس اسم الدالة الجديدة ؛
نسخة الكود كما يلي:
// كائن
var o = {}
// ما يعادل
var o2 = object.create ({}) ؛
// المُنشئون هم نفسه ؛
// -----------------------------------
وظيفة func () {
this.a = 'func' ؛
}
func.prototype.method = function () {
إعادة هذا.
}
var newfunc = new func () ؛
// ما يعادل [التأثير هو نفسه]
var newfunc2 = object.create (object.prototype/*function.prototype || function () {}*/، {
ج: {value: 'func' ، القابلة للكتابة: صواب} ،
الطريقة: {value: function () {return this.a ؛}}
}) ؛
لكن Newfunc و Newfunc2 يختلفان في مراجع الوظيفة لإنشاء كائناتهما.
Newfunc هو وظيفة func () {...} ، newfunc2 هي وظيفة وظيفة {native}
نسخة الكود كما يلي:
Object.Create (Proto [، Propertiesfield]):
يشير Proto إلى أن القيمة مطلوبة ويمكن أن تكون فارغة. إذا لم يتم تعيينه ، فسيتم طرح استثناء ؛
Proto غير خارق ، أي القيمة التي تم إنشاؤها ، أي القيمة التي كانت جديدة ؛ تحتوي معظم الكائنات في JavaScript على سمات مُنشأة ، والتي تشير السمات إلى الوظيفة التي يتم إنشاء الكائن من خلالها ؛
PropertiesField اختياري ، ويحدد خصائص الأعضاء أو الأساليب التي قد تكون مطلوبة للكائنات التي تم إنشاؤها حديثًا ؛