1. القيمة الأصلية والقيمة المرجعية
يتم تخزين القيمة الأصلية في المكدس، ويتم تخزين القيمة المرجعية في الكومة.
انسخ رمز الكود كما يلي:
وظيفة الشخص (المعرف، الاسم، العمر) {
this.id = id;
this.name = name;
this.age = age;
}
فارنوم = 10؛
فار بول = صحيح؛
var str = "abc";
var obj = new Object();
var arr = ['a','b','c'];
var person = new Person(100,"Idiot's motto",25);
2.غير محدد وخالي
غير محدد: المتغير غير محدد، وهو عبارة عن قيمة حصرية من النوع غير المحدد؛
null: لم يتم تخصيص المرجع، فهو عبارة عن قيمة حصرية من النوع Null.
typeof(undef) == undefine;
typeof(null) == object;
undefine==null;
غير محدد!==null;
مثيل فارغ للكائن == خطأ؛
مثيل غير محدد للكائن == خطأ؛
على الرغم من وجود نوعين غير محدد وNull، إلا أن المثال التالي يوضح أن هذين النوعين غير مرئيين، مما يعني أنه يمكننا استخدام قيمهما فقط:
تنبيه (مثيل غير محدد من غير محدد)؛
تنبيه (مثيل فارغ لـ Null) ؛
3. المصفوفة الزائفة
سمات:
1) لديه سمة الطول؛
2) الوصول إلى البيانات بترتيب الفهرس مثل المصفوفة؛
3) لا توجد طرق لمعالجة البيانات خاصة بالصفيف مثل الدفع والبوب والتقطيع...
يمكن تحويل المصفوفات الزائفة إلى مصفوفات حقيقية من خلال Array.prototype.slice:
varfaceArray = {0: 'a', 1: 'b', length: 2}//مصفوفة زائفة قياسية;
var realArray = Array.prototype.slice.call(fakeArray);
المصفوفات الزائفة في js: الوسائط، وnode.childNodes، وdocument.getElementsByTagName()...
مشكلة في IE: لا يمكن تحويل Node.childNodes في IE بالشريحة.
المصفوفة الزائفة في Jquery: Jquery نفسها عبارة عن مصفوفة زائفة:
تنبيه($('.class1').length); تنبيه($('.class1').[0].tagName);
4. حول الحروف البسيطة
var a = 1;
يبدو أن الحروف لها أنواع
تنبيه (نوع أ)؛ // رقم
تنبيه (نوع ب)؛ // منطقية
تنبيه (نوع ج)؛ // سلسلة
ولكن لا يمكن قياسه من خلال مثيل.
تنبيه (مثال للرقم) // خطأ
تنبيه (مثيل للكائن) // خطأ
تنبيه (مثيل ب منطقي) // خطأ
تنبيه (مثيل ب للكائن) // خطأ
تنبيه (ج مثيل سلسلة) // خطأ
تنبيه (ج مثيل للكائن) // خطأ
5. سمة النموذج الأولي للوظيفة وسمة النموذج الأولي الداخلي لمثيل الكائن
تحتوي كل وظيفة (منشئ) على سمة نموذج أولي، وكل مثيل كائن له سمة نموذج داخلي غير مرئية (تجعلها Mozilla عامة ويمكن الحصول عليها من خلال __proto__)، والتي تشير إلى سمة النموذج الأولي للمنشئ خاصية النموذج الأولي الخاصة، والتي تشكل سلسلة النموذج الأولي هي الكائن العلوي، لذلك ستشير جميع سلاسل النموذج الأولي في النهاية إلى Object.prototype عند الوصول إلى خصائص/طرق مثيل الكائن، ابدأ البحث من مثيل الكائن نفسه، إذا تعذر العثور عليه، فابحث لأعلى على طول سلسلة النموذج الأولي حتى Object.prototype.prototype == null.
6. سر صغير للمنشئ
انسخ رمز الكود كما يلي:
var s = new function(){return "sss"};
تنبيه (التنبيهات)؛//[كائن كائن]
s = new function(){return new String("sss"});
التنبيه (التنبيهات)؛ //sss
شرح هذا الكود :
طالما أن المُنشئ بعد التعبير الجديد يُرجع كائنًا مرجعيًا (صفيف، كائن، وظيفة، وما إلى ذلك)، فسوف يحل محل الكائن المجهول الذي تم إنشاؤه بواسطة new النوع البدائي غير محدد)، ثم يتم إرجاع الكائن المجهول الذي تم إنشاؤه بواسطة new.
7. عملية إنشاء الكائن
انسخ رمز الكود كما يلي:
وظيفة الشخص (الاسم) {
this.name = name;
}
نموذج الشخص = {
الحصول على الاسم: وظيفة () {إرجاع هذا. الاسم}
};
var p = new Person('zhangsan');
فك تشفير عملية إنشاء p:
◦إنشاء كائن مضمن وتهيئته؛
◦ قم بتوجيه [[النموذج الأولي]] الداخلي لـ p إلى Person.prototype؛
◦ استخدم p كهذا واستخدم معلمة الوسائط لاستدعاء طريقة [[Call]] الداخلية للشخص، أي تنفيذ نص وظيفة الشخص وإرجاع القيمة المرجعة إذا لم يكن هناك إرجاع، فسيتم إرجاع غير محدد؛
◦إذا قامت الخطوة السابقة بإرجاع نوع كائن، قم بإرجاع هذه القيمة إلى p، وإلا قم بإرجاع obj.
8. خصائص الكائن الخاصة وخصائصه الموروثة
انسخ رمز الكود كما يلي:
وظيفة الشخص (الاسم) {
this.name = name;
}
نموذج الشخص = {
النوع: "إنسان"،
الحصول على الاسم: وظيفة () {إرجاع هذا. الاسم}
};
var p = new Person('zhangsan');
تنبيه(p.hasOwnProperty('type'));//خطأ
p.type = 'ren';
تنبيه(p.hasOwnProperty('type'));//true
نتيجة التشغيل واضحة للغاية. لا يمكن لخصائص الكائن تعديل الخاصية التي تحمل الاسم نفسه في النموذج الأولي الخاص به، ولكنها ستقوم فقط بإنشاء خاصية بنفس الاسم وتعيين قيمة لها.
9. عملية إنشاء الكائنات الوظيفية
إنشاء كائن كائن مدمج fn؛
اضبط [[النموذج الأولي]] الداخلي لـ fn على Function.prototype؛
قم بتعيين سمة [[Call]] الداخلية، وهي طريقة يتم تنفيذها داخليًا وتتعامل مع منطق استدعاءات الوظائف. (يُفهم ببساطة على أنه يشير إلى الجسم الوظيفي)؛
اضبط fn.length على funArgs.length إذا لم تكن الدالة تحتوي على معلمات، فاضبط fn.length على 0؛
يشير مُنشئ fn.prototype إلى fn نفسه؛
العودة الجبهة الوطنية.
10. مبدأ المثيل
للتحقق مما إذا كان a هو مثيل لـ B، تحتاج إلى التحقق مما إذا كان الكائن المشار إليه بواسطة النموذج الأولي لـ B (سمة النموذج الأولي للمنشئ) موجود في سلسلة النموذج الأولي لـ a.
11. التخمينات حول الوظيفة والكائن
تنبيه (مثيل الدالة للوظيفة)؛ // صحيح
تنبيه (مثيل وظيفة الكائن)؛ // صحيح
تنبيه (مثيل الكائن للوظيفة)؛ // صحيح
تنبيه (كائن مثيل للكائن)؛ // صحيح
لقد كنت أفكر في الأمر لفترة طويلة، لكنني لم أفهم ذلك ...