1. نموذج المصنع
وظيفة الشخص (الاسم ، العمر) {var p = new Object () ؛ p.name = الاسم ؛ p.age = العمر ؛ p.showMessage = function () {console.log ("name:"+this.name+"Age:"+this.age) ؛ } return p ؛} var p1 = person ("k1" ، 28) ؛ var p2 = person ("k2" ، 29) ؛ console.log (p1.showmessage == p2.showmessage) ؛عيب نمط المصنع هو أنه لم يتم حل مشكلة التعرف على الكائن ، وأن طريقة العرض لكل كائن ليست هي نفس الطريقة (يتم إعادة إنشاء كل طريقة على كل مثيل كائن) ، مما يزيد من النفقات العامة
2. وضع المنشئ
وظيفة الشخص (الاسم ، العمر) {this.name = name ؛ this.age = العمر ؛ this.showMessage = function () {console.log ("name:"+this.name+"Age:"+this.age) ؛ }} var p1 = شخص جديد ("k1" ، 28) ؛ var p2 = شخص جديد ("k2" ، 29) ؛ console.log (p1.showmessage == p2.showmessage) ؛يحل نمط المنشئ مشكلة التعرف على الكائن ، لكن طريقة العرض لكل كائن ليست هي نفس الطريقة (يتم إعادة إنشاء كل طريقة على كل مثيل كائن) ، مما يزيد من النفقات العامة
3. وضع النموذج الأولي
وظيفة person () {} person.prototype.name = "k" ؛ person.prototype.age = 29 ؛ person.prototype.showmessage = function () {console.log ("name:"+this.name+"age:" this.age) ؛ person () ؛ p2.showMessage () ؛ // الاسم: k العمر: 29Console.log (p1.showmessage == p2.showMessage) ؛ // true -المرجع هو نفس الوظيفة console.log (p1.constructor) // [person] console.log (person.prototype.isprototypeof (p1)) ؛ // trueconsole.log (object.getPrototypeof (p1) == person.prototype) ؛ // trueيحل نمط النموذج الأولي مشكلة "يتم إعادة إنشاء كل طريقة على كل مثيل كائن" ويحل أيضًا مشكلة التعرف على الكائن.
تتمثل مشكلة كبيرة في وضع النموذج الأولي في أن جميع الكائنات والمتغيرات والوظائف المثبتة تحت النموذج الأولي للوظيفة تتم مشاركتها بواسطة جميع مثيلات الوظيفة. على الرغم من أنه يمكن الوصول إلى خصائص النموذج الأولي من خلال الحالات P1 و P2 ، لا يمكن تعديل قيمة الخاصية. على سبيل المثال ، p1.name = "k1" ، فإنه يضيف فقط خاصية من name = "k1" على مثيل p1 ، ولا يتغير إلى النموذج الأولي. لا بأس إذا كان نوع القيمة ، ولكن إذا كان نوعًا مرجعيًا ، فستكون هناك مشاكل. انظر المثال التالي
وظيفة person () {} ؛ person.prototype. // Budap1،2،3/201p1.array.push(4) ؛ inconsole.log(p1.array) ؛// Budap1،2،3،4/201console.log(p2.array) ؛// Budap1،2،3،4]يضيف P1 قيمة إلى المصفوفة ، والتي تنعكس أيضًا في P2 لأنها تشير جميعًا إلى نفس الصفيف
4. الجمع بين وضع المنشئ ووضع النموذج الأولي
هذه هي الطريقة الأكثر شيوعًا لإنشاء كائنات ، والجمع بين مزايا المُنشئين وأنماط النموذج الأولي
وظيفة الشخص (الاسم ، العمر) {this.name = name ؛ this.age = Age ؛} person.prototype.showmessage = function () {console.log ("name:"+this.name+"Age:"+this.age) ؛} ؛ var p1 = new شخص ("k" ، 30) ؛ p1.showmessage () ؛5. وضع النموذج الأولي الديناميكي
الحل الرئيسي هو: تغليف جميع المعلومات في المُنشئ ، والتي تتماشى أكثر مع فكرة OO
وظيفة الشخص (الاسم ، العمر) {this.name = name ؛ this.age = العمر ؛ if (typeof this.showMessage! = "function") {person.prototype.showMessage = function () {console.log ("name:"+this.name+"Age:"+this.age) ؛ }}} var p1 = شخص جديد ("k" ، 30) ؛ p1.showmessage () ؛6. نمط مُنشئ الطفيليات
وظيفة الشخص (الاسم ، العمر) {var o = new Object () ؛ O.Name = name ؛ O.AGE = العمر ؛ O.SayName = function () {console.log (this.name) ؛ } ؛ return o ؛} var p1 = شخص جديد ("k" ، 28) ؛ p1.sayname () ؛نمط المنشئ الطفيلي هو بالضبط نفس نمط المصنع ، باستثناء أن الكلمة الرئيسية الجديدة تستخدم عند إنشاء الكائن. مثال أعلاه: var p1 = شخص جديد ("K" ، 28).
وظيفتها الرئيسية هي: لتوسيع الوظائف في هذا المنشئ. على سبيل المثال ، أريد تحديد نوع صفيف myarray ، والذي يعتمد على صفيف الصفيف وله طريقته الخاصة ، على النحو التالي
دالة myArray () {var stable = new array () ؛ القيم. push.apply (القيم ، الوسائط) ؛ // الطريقة التي حددها بنفسك القيم. } ؛ قيم الإرجاع ؛} var colors = new myArray ("Red" ، "Blue" ، "Green") ؛ Console.log (colors.topipedstring ()) ؛ console.log (colors exateof array) ؛7. وضع مُنشئ مستقر
يتبع المُنشئ الآمن النمط من نوع المنشئ الطفيلي ، ولكن هناك اختلافان: أحدهما لا يستخدم هذا ، والآخر ليس استخدام جديد للاتصال بالمقدم.
وظيفة الشخص (الاسم ، العمر) {var o = new Object () ؛ var tempage = العمر ؛ O.Name = name ؛ O.AGE = العمر ؛ O.SayName = function () {console.log (name) ؛ } o.sayage = function () {console.log (tempage) ؛ } return o ؛} var p1 = person ("k1" ، 28) ؛ p1.sayname () ؛ // k1p1.sayage () ؛ // 28p1.name = "k2" ؛ p1.age = 30 ؛ p1.sayname () ؛ // k1p1.sayage () ؛ // 28عندما ترى الإخراج أعلاه ، يمكنك أن تفهم ماهية نمط كائن آمن. إنه كائن تم إنشاؤه باستخدام هذا الوضع. لا توجد طريقة أخرى لتغيير القيمة التي تم تمريرها أثناء التهيئة. هذا شخص ("K1" ، 28). مثل هذا الكائن هو كائن آمن. في الواقع ، إنه إغلاق JavaScript.
التحليل الموجز أعلاه لطريقة إنشاء كائن JavaScript هو كل المحتوى الذي أشاركه معك. آمل أن تتمكن من إعطائك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.