التفسير في التعليقات مفصل للغاية ، لذلك لن أتحدث كثيرًا هنا ، فقط أدخل الرمز:
<script type = "text/javaScript"> // ecma-262 يعرّف كائنًا على أنه: "مجموعة من السمات غير المرتبة ، والتي يمكن أن تحتوي سماتها على القيم أو الكائنات أو الوظائف الأساسية" // أسهل طريقة لفهم الكائن هي إنشاء مثيل للكائن وإضافة سمات وطرق ذلك var or person = new is () ؛) ؛ person.name = "xulei" ؛ person.age = "23" ؛ person.job = "Engineer-end" ؛ person.sayname = function () {Alert (this.name) ؛ }. نوع السمة: سمة البيانات والوصول إلى سمة // 1. سمة البيانات ، هناك 4 خصائص تصف سلوكها // [قابلة للتكوين]: تشير إلى ما إذا كان يمكن حذف السمة لإعادة تعريف السمة ، ما إذا كان يمكن تعديل السمة ، أو ما إذا كان يمكن تعديل السمة من خلال سمة الإكسسو القيمة الافتراضية صحيحة // [القيمة]: تحتوي على قيمة البيانات لهذه السمة. القيمة الافتراضية غير محددة var person = {name: "xulei"} // يتم إنشاء كائن شخص هنا ، وقيمة القيمة هي "xulei" // لتعديل الخصائص الافتراضية للخاصية ، كائن الوصفي ecmascript5. Object.DefineProperty (peron ، "name" ، {crinsable: false ، // لا يمكن تعديل الخصائص القيمة: "xu lei-xulei"}) ؛ ALERT (peron.name) ؛ // xu lei-xulei peron.name = "xu lei" ؛ تنبيه (peron.name) ؛ // xu lei-xulei // سيتم تجاهل العمليات المذكورة أعلاه في الوضع غير المتخلف. إذا تم إلقاء استثناء في وضع صارم // بمجرد تعريف السمة على أنها غير قابلة للتكوين ، فلا يمكن إرجاعها إلى تكوين. // في معظم الحالات ، ليست هناك حاجة لاستخدام هذه الميزات المتقدمة التي توفرها الكائن. لكنه مفيد للغاية لفهم جافا سكريبت. // ينصح القراء بعدم استخدام هذه الطريقة على IE8. // 2. إن الوصول إلى خصائصه له 4 خصائص // [قابلة للتكوين]: يشير إلى ما إذا كان يمكن حذف السمة لإعادة تعريف السمة ، أو ما إذا كان يمكن تعديل خصائص السمة ، أو ما إذا كان يمكن تعديل السمة من خلال القيمة المتمثلة في أن تكون القيمة الوظيفية هي "القراءة". ] }) ؛ book.year = 2005 ؛ تنبيه (book.edition) ؛ // 2 // إنشاء كائن // 1. تعامل مع المنشئ كشخص دالة (الاسم ، العمر ، الوظيفة) {this.name = name ؛ this.age = العمر ؛ this.job = Job ؛ this.sayname = function () {Alert (this.name) ؛ }} // استخدم var person = شخص جديد ("Xulei" ، 23 ، "Software") ؛ person.sayname () ؛ // استخدم الشخص ("Xulei2" ، 23 ، "Job2") ؛ // إضافة إلى window.sayname () ؛ // استدعاء var في نطاق كائن آخر o = كائن جديد () ؛ person.call (o ، "Xulei3" ، 23 ، "Job3") ؛ O.SayName () ؛ </script>دعونا نكون فقرة أخرى:
<script type = "text/javaScript"> // 1. فهم كائن النموذج الأولي // 2. النموذج الأولي وفي المشغل // 3. بناء نموذج أولي أبسط // 4. ديناميكية النموذج الأولي // 5. كائن أصلي النموذج الأولي // 6. مشاكل مع كائن النموذج الأولي // 1. كلما تم إنشاء وظيفة ، سيتم إنشاء سمة النموذج الأولي للوظيفة استنادًا إلى مجموعة محددة من القواعد. تشير هذه السمة إلى كائن النموذج الأولي للدالة // افتراضيًا ، ستحصل جميع كائنات النموذج الأولي تلقائيًا على سمة مُنشئ (مُنشئ) ، والتي تحتوي على مؤشر إلى الوظيفة التي توجد فيها سمة النموذج الأولي // مثل إنشاء البناء المخصص ، لن يتم تخصيصه عن البناء. أما بالنسبة للطرق الأخرى ، فهي موروثة من كائن. التنبيه (person.prototype.isprototypeof (p1)) التنبيه (object.getPrototypeof (p1) == person.prototype) // على الرغم من أن القيمة المحفوظة في النموذج الأولي يمكن الوصول إليها من خلال مثيل الكائن ، لا يمكن إعادة كتابة القيمة في النموذج الأولي من خلال مثيل الكائن. إذا أضفنا خاصية // إلى المثيل وكان اسم الخاصية هو نفسه المثيل في النموذج الأولي ، فإننا نقوم بإنشاء الخاصية في المثيل ، وسوف يمنع الخاصية الخاصية في النموذج الأولي. على سبيل المثال: وظيفة person () {} person.prototype.name = "Amber" ؛ person.prototype.age = 23 ؛ person.prototype.job = "Software Engineer" ؛ person.prototype.sayname = function () {Alert (this.name)} var person1 = new person () ؛ var person2 = شخص جديد () ؛ person1.name = "Amber.xu" ؛ ALERT (person1.name) ؛ // AMBER.XU -from تنبيه مثيل (person2.name) ؛ // AMBER -from formete defere1.name ؛ التنبيه (person1.name) ؛ // العنبر -من النموذج الأولي // استخدم طريقة hasownproperty () لاكتشاف ما إذا كانت خاصية موجودة في المثيل أو في النموذج الأولي. هذه الطريقة (الموروثة من الكائن) // إرجاع Function Function Person () {} person.prototype.name = "Amber" ؛ person.prototype.age = 23 ؛ person.prototype.job = "Software Engineer" ؛ person.prototype.sayname = function () {Alert (this.name)} var person1 = new person () ؛ var person2 = شخص جديد () ؛ ALERT (person1.hasownproperty ("name")) ؛ // false من تنبيه المثيل (person2.hasownproperty ("name")) ؛ تنبيه (person1.name) ؛ ALERT (person1.hasownproperty ("name")) ؛ // true from enuacle delete person1.name ؛ تنبيه (person1.name) ؛ تنبيه (person1.hasownproperty ("الاسم")) ؛ // خطأ من النموذج الأولي // 2. النموذج الأولي وفي المشغل//في وجود طريقتان لاستخدامه ، يتم استخدام أحدهما بشكل منفصل وفي العمل. عند استخدامه بمفرده ، يعيد المشغل IN صحيحًا عندما يمكن للكائن الوصول إلى خاصية معينة // بغض النظر عما إذا كانت الخاصية تأتي من النموذج الأولي أو شخص وظيفة المثيل () {} person.prototype.name = "Amber" ؛ person.prototype.age = 23 ؛ person.prototype.job = "Software Engineer" ؛ person.prototype.sayname = function () {Alert (this.name)} var person1 = new person () ؛ var person2 = شخص جديد () ؛ التنبيه ("الاسم" في شخص 1) ؛ // صحيح من تنبيه النموذج الأولي ("الاسم" في person2) ؛ // صحيح من تنبيه النموذج الأولي ("الارتفاع" في شخص 1) ؛ // false // بهذه الطريقة يمكنك تغليف وظيفة (ما إذا كانت الخاصية المحددة هي النموذج الأولي للكائن المعطى) hasprotypertyperty (اسم ، اسم ". } alert("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Returns all خصائص التعداد التي يمكن الوصول إليها من خلال الكائنات ، بما في ذلك كل من خصائص النموذج الأولي. o = {toString: function () {return "كائن" ؛ قبول كائن كوسيطة ، // صفيف سلسلة تحتوي على جميع خصائص enumperties person () {} person.prototype.name = "Amber" ؛ person.prototype.age = 23 ؛ person.prototype.job = "Software Engineer" ؛ person.prototype.sayname = function () {Alert (this.name)} var person1 = new person () ؛ var person2 = شخص جديد () ؛ var keys = object.keys (person.prototype) ؛ تنبيه (مفاتيح) person1.name = "Amber.xu" ؛ person1.age = 23 ؛ var keys = object.keys (person1) ؛ تنبيه (مفاتيح) يُحذًِر("--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- الاسم: "Amber": 23 ، "Software" ، Sayname: الشخص) // تنبيه حقيقي (كائن مثيل صديق لـ Friend) // True Alert (friend.constructor == person) ؛ // false Alert (friend.constructor == object) ؛ // true // إذا كان المُنشئ مهمًا حقًا بالنسبة لك ، يمكنك تعيينه على القيمة المناسبة: sayname: function () {Alert (this.name)}} var friend = new person () ؛ تنبيه ("ضبط يدويا constructor----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- //في هذه الحالة ، يمكنك استخدام Object.defineProperty (Person. المثيل والنموذج الأولي ، والاتصال بين المثيل والنموذج الأولي هو مجرد مؤشر ، وليس نسخة // عندما نسمي طريقة Sayhi () ، سنبحث أولاً عن طريقة تدعى Sayhi في المثيل ، ونبحث عن النموذج الأولي إذا لم يتم العثور عليها. // ومع ذلك ، إذا قمت بإعادة كتابة كائن النموذج الأولي بأكمله ، فسيكون الموقف مختلفًا. //نعلم أنه عند استدعاء المُنشئ ، سيتم إضافة مؤشر النموذج الأولي إلى النموذج الأولي الأصلي إلى المثيل ، وتعديل النموذج الأولي إلى كائن آخر يعادل قطع الاتصال بين المنشئ والنموذج الأولي الأصلي. // تذكر: يشير المؤشر في المثيل فقط إلى النموذج الأولي ، وليس إلى المُنشئ. على سبيل المثال: الدالة A () {} var a1 = new a () ؛ A.Prototype = {Constructor: A ، الاسم: "Amber" ، العمر: 23 ، الوظيفة: "Software" ، sayname: function () {Alert (this.name)}}} alert("ERROR------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Even all يتم إنشاء أنواع المرجع الأصلية باستخدام هذا النمط. string.prototype.startswith = function (text) {return this.indexof (text) == 0 ؛ } ؛ var msg = "hello" ؛ ALERT (msg.startswith ("H")) ؛ // لا نوصي بالقيام بذلك. تنبيه ("مشكلة النموذج الأولي مع كائن النموذج الأولي") ؛ // 6. مثال على النموذج الأولي ques () {} ques.prototype = {constructor: ques ، name: "Amber" ، Age: 23 ، Job: var q1 = ques () جديد ؛ var q2 = ques () جديد ؛ Q1.Friends.push ("Wang Wu") ؛ ALERT (Q1.Friends) ؛ // ALERT (Q2.Friends) ؛ // ALERT (Q1.Friends === Q2 // أعتقد أن الجميع رأوا المشكلة. عندما قمت بإنشاء حالتين Q1 و Q2 ، وعندما أضفت "Wang Wu" إلى "الأصدقاء" من Q1 ، كان "أصدقاء" Q2 أيضًا ثلاثة "Wang San و Li Si و Wang Wu // هذا لأن الصفيف موجود على ques.prototype ، وليس على Q1.ستنتهي هذه المقالة هنا. سنستمر في مناقشة البرمجة الموجهة نحو الكائنات لجافا سكريبت في المستقبل. أتمنى أن يعجبه الجميع.