<script> function p () {var len = ediuments.length ؛ لـ (var i = 0 ؛ i <len ؛ i ++) {document.write (الوسيطات [i]+"<br/>") ؛ }} الدالة myClass (x ، y) {this.x = x ؛ this.y = y ؛ this.show = function () {return this.x+this.y ؛ }} var m1 = new myclass (1،2) ؛ var m2 = new myclass (3،4) ؛ p (m1.show () ، m2.show ()) ؛ </script>المشاكل الحالية
1. بما أن جميع الحالات نسخ كيانات محددة بنفس الطريقة ، يمكن حل الكفاءة (كفاءة الذاكرة والتنفيذ غير الفعال) من خلال ميراث النموذج الأولي.
2. يمكن حل غير قادر على الوصول إلى التحكم في قيم السمات (خاصة ، عامة) من خلال الإغلاق
كائن التشغيل الذي تم الوصول إليه بواسطة السمات ليس متغيرًا بل إشارة إلى الكائن
معالجة قراءة أجزاء عدد صحيح فقط من القيم الرقمية
الرياضيات [هذا <0؟ 'celling': 'floor'] (هذا) ؛
صفيف ترابط
في JS ، يجب عليك تمرير كائنات لتنفيذ المصفوفات الترابطية
يتم إجراء العمليات الأساسية بواسطة المفاتيح ، وعناصر الإعداد ، وحذف العناصر.
<script> var map = {x: 3 ، y: 4} ؛ p (map.x) ؛ delete map.x ؛ //truep(map.x) ؛ // غير محدد نتيجة الوصول إلى العناصر غير الموجودة غير محددة. نظرًا لأنه يمكن ضبط القيمة على غير محددة ، فمن المستحيل الحكم على ما إذا كانت القيمة موجودة من خلال مقارنة القيمة مع غير محددة. يمكنك تعداده من خلال في = غير محدد "؛ p (a) ؛ // undefinedp (typeof map.x == a) ؛ // صحيح </script>كصفيف ترابط ، يجب عليك الانتباه إلى
<script> function myClass (x ، y) {this.x = x ؛ this.y = y ؛} myclass.prototype.z = 5 ؛ var obj = new myclass (1،2) ؛ for (var in in obj) {p (key+":"+obj [key]) ؛ // سيتم تعداد السمات الموروثة من خلال النموذج الأولي} // x: 1 y: 2 z: 5delete obj.x ؛ // truep (obj.x) ؛ //undefinedp(oBj.z) ؛ // 5 // لا يمكن حذف السمات الموروثة من خلال النموذج الأولي حذف OBJ.Z ؛ //truep(oBj.z) ؛//5//when باستخدام الكائنات كصفيف نقابي ، يتم إنشاء حرفيات عادة. حتى إذا كان العرض يستخدم كائنًا فارغًا حرفيًا لإنشاء صفيف ترابط بدون عناصر ، فإن سمة النموذج الأولي P ('tostring' في OBJ) ؛ // truevar obj1 = {} ؛ p ('toString' in OBJ1) ؛ // true // enumenp (obj1.length) ؛ // undefinedfor (var k in obj1) {p (obj1 [k]) ؛} // لا يتم تعداد أي عناصر. هذا بسبب السمة التعداد. // undefinedfor (var k in obj1) {p (obj1 [k]) ؛} // لا يتم تعداد أي عناصر. هذا بسبب السمة التعداد. . // truedelete map ['tostring'] ؛ p (map.hasownproperty ('tostring')) ؛ // false </script>صفات
تحتوي سمات الكائن أيضًا على بعض السمات
يلخص الجدول التالي السمات المحددة في الإصدار الخامس من ECMASCRIPT ، ويتم تعريف قيمة السمة على أنها سمات قيمة.
الجدول 1
اسم السمة | معنى |
قابل للكتابة | يمكن إعادة كتابة قيمة السمة |
التعداد | يمكن تعدادها ل |
قابل للتكوين | يمكنك تغيير السمات وحذف السمات |
يحصل | وظيفة getter التي تحدد قيم الخصائص |
تعيين | وظيفة setter التي يمكن أن تحدد قيم السمة |
الأشياء غير القابلة للتغيير
وهذا هو ، كائن لا يمكن تغيير حالته بعد الجيل ، وكائن سلسلة هو كائن غير قابل للتغيير نموذجي.
الاستخدام المرن للكائنات غير القابلة للتغيير يمكن أن يحسن متانة البرنامج ، مثل نقله إلى معلمات الطريقة ، هناك طريقة لإعادة كتابة محتوى الكائن ، إلخ.
يمكن تنفيذ الأشياء غير القابلة للتغيير في JS
1. إخفاء السمة (حالة مخفية) ولا توفر عمليات التغيير (تنفيذ الإغلاق)
2. الاستخدام المرن للوظائف التي توفرها ECMAscript في الطبعة الخامسة
3. الاستخدام المرن للسمات القابلة للكتابة والقابلة للتكوين والمستقبين والغزوات
يتم عرض الوظائف المستخدمة لدعم الكائنات غير القابلة للتغيير في الإصدار 5 من ECMASCRIPT في الجدول التالي
اسم الطريقة | سمات جديدة | حذف السمة | تغيير قيمة السمة | طريقة التأكيد |
منعت | x | س | س | Object.isextenseBly |
ختم | x | x | س | Object.issealed |
تجميد | x | x | x | كائن |
كائن
<script> var obj = {x: 2 ، y: 3} ؛ object.preventStextensions (obj) ؛ // لا يمكن إضافة السمة obj.z = 4 ؛ p (object.keys (obj)) ؛ // x ، y // لا يمكن حذف السمة obj.y ؛ p (object.keys (obj)) ؛ // x // لا يمكن إضافة قيمة السمة obj.x = 20 ؛ p (obj.x) ؛ //20//OBject.seal مثال واقعية يعين تكوين السمة إلى fals var obj = {x: 2 ، y: 3} ؛ object.seal (obj) ؛ // لا يمكن إضافة أو حذف OBJ.z = 3 ؛ p (object.keys (obj)) ؛ // x ، ydelete obj.x ؛ //falsep(oBject.keys(oBj)) ؛//x ، obj.z = 3 ؛ p (object.keys (obj)) ؛ // x ، y // يمكن أن يغير قيمة السمة obj.x = 20 ؛ p (obj.x) ؛ // 20 </script>بحاجة إلى الانتباه
1. بالنسبة للطرق الثلاث المذكورة أعلاه ، لا يمكن استعادتها بمجرد تغييرها.
2. إذا كنت ترغب في جعل الطريقة الموروثة في ميراث النموذج الأولي دون تغيير ، فأنت بحاجة إلى عرضها.