تتطلب قراءة هذه المقالة تجربة البرمجة بلغات أخرى.
تشمل أنواع بسيطة في JavaScript:
1. الأرقام
2. سلسلة
3. منطقية (صواب وكاذبة)
4. نول
5.ededed
الأنواع الأخرى هي كائنات (يجب ألا نخلط بين قيمة الإرجاع لمشغل typeof) ، على سبيل المثال:
1. الوظيفة
2. أarray
3. التعبيرات العادية
4. الكائن (الكائنات هي كائنات طبيعية)
أساس الكائن
في JavaScript ، الكائنات عبارة عن مجموعات من الخصائص (الكائنات عبارة عن صفائف نقاطية) ، تتضمن كل خاصية:
1. يجب أن يكون اسم السمة سلسلة
2. يمكن أن تكون قيمة السمة أي قيمة غير محددة
قم بإنشاء كائن من خلال كائن حرفي:
نسخة الكود كما يلي:
// إنشاء كائن فارغ من خلال كائن حرفي {}
var reghing_object = {} ؛
اسم السمة وقيمة السمة للكائن:
نسخة الكود كما يلي:
var stande = {
// "الاسم الأول" هو اسم السمة ، و "Jerome" هو قيمة السمة
"الاسم الأول": "Jerome" ،
// "آخر اسم" هو اسم السمة ، و "Howard" هو قيمة السمة
"اسم الأخير": "هوارد"
} ؛
إذا كان اسم السمة هو معرف قانوني ، فيمكن حذف علامات الاقتباس:
نسخة الكود كما يلي:
Var Flight = {
شركة الطيران: "المحيط" ،
الرقم: 815 ،
قسم: {
IATA: "Syd" ،
الوقت: "2004-09-22 14:55" ،
المدينة: "سيدني"
} ،
الوصول: {
IATA: "LAX" ،
الوقت: "2004-09-23 10:42" ،
المدينة: "لوس أنجلوس"
}
} ؛
لنلقي نظرة على مثال الوصول إلى الممتلكات:
نسخة الكود كما يلي:
var owner = {name: "name5566"} ؛
owner.name ؛ // "name5566"
المالك ["الاسم"] ؛ // "name5566"
المالك. // غير محدد
owner.job = "coder" ؛ // أو المالك ["Job"] = "Coder" ؛
إذا لم يكن اسم السمة معرفًا قانونيًا ، فيجب أن يتم لفه في اقتباسات. قيمة الخاصية غير الموجودة غير محددة. يتم تمرير الكائنات بالرجوع إليها بدلاً من القيمة:
نسخة الكود كما يلي:
var x = {} ؛
var owner = x ؛
owner.name = "name5566" ؛
x.name ؛ // x.name === "name5566"
هنا x والمالك تشير إلى نفس الكائن.
يمكن حذف سمات الكائن باستخدام مشغل الحذف:
نسخة الكود كما يلي:
حذف obj.x ؛ // حذف سمة X للكائن OBJ
النموذج الأولي للكائن
يتم ربط كل كائن بكائن النموذج الأولي ، ويمكن للكائن أن يرث السمات من كائن النموذج الأولي. نقوم بإنشاء كائن من خلال كائن حرفي ، كائن النموذج الأولي هو كائن. كائن النمط (الكائن. كائن النمط نفسه ليس له كائن نموذج أولي). عندما نقوم بإنشاء كائن ، يمكننا تعيين كائن النموذج الأولي للكائن (ثم مناقشة طريقة الإعداد المحددة). عند محاولة الحصول على (عدم تعديل) سمة من كائن ، إذا لم يكن الكائن موجودًا ، فإن JavaScript يحاول الحصول على السمة من كائن النموذج الأولي لهذا الكائن ، إذا لم يكن هناك مثل هذا السمة في كائن النموذج الأولي ، ثم ابحث عن كائن النموذج الأولي لهذا كائن النموذج الأولي ، وما إلى ذلك حتى الكائن. مقارنة بالحصول على السمات ، عندما نقوم بتعديل سمة الكائن ، فلن يؤثر ذلك على كائن النموذج الأولي.
الأساسيات الوظيفية
الوظائف هي أيضًا كائنات في javaScript ، والتي ترتبط بالوظيفة. كائن النموذج الأولي للنموذج (function.prototype روابط إلى Object.prototype). تحتوي الوظيفة على خاصية تسمى النموذج الأولي ، وقيمتها كائن. يحتوي هذا الكائن على مُنشئ خاصية ، وقيمة المنشئ هي هذه الوظيفة:
نسخة الكود كما يلي:
var f = function () {}
Typeof f.prototype ؛ // 'هدف'
typeof f.prototype.constructor ؛ // 'وظيفة'
f === f.prototype.constructor ؛ // حقيقي
الوظائف هي كائنات ، يمكنك استخدام وظائف مثل استخدام الكائنات ، أي ، يمكن حفظ الوظائف في المتغيرات والمصفوفات ، ويمكن تمريرها كمعلمات للوظائف ، ويمكن تعريف الوظائف داخل الوظائف. كملاحظة جانبية ، تحتوي الوظيفة على خصائص مخفية:
1. سياق الوظيفة
2. رمز الوظيفة
يتم إنشاء الوظيفة على النحو التالي:
نسخة الكود كما يلي:
var f = function add (a ، b) {
إرجاع A + B ؛
}
console.log (f) ؛ // الإخراج [الوظيفة: إضافة]
اسم الوظيفة بعد وظيفة الكلمة الرئيسية اختيارية. نقوم بصياغة اسم الوظيفة بشكل أساسي لعدة أغراض:
1. للمكالمة العودية
2. يتم استخدام تصحيحات ، أدوات التطوير ، وما إلى ذلك لتحديد الوظائف
في كثير من الأحيان لا نحتاج إلى أسماء الوظائف ، وتسمى الوظائف بدون أسماء وظائف وظائف مجهولة. قائمة المعلمات ملفوفة بين قوسين. لا يتطلب JavaScript مطابقة المعلمات الحقيقية والمعلمات الرسمية ، على سبيل المثال:
نسخة الكود كما يلي:
var add = function (a ، b) {
إرجاع A + B ؛
}
إضافة (1 ، 2 ، 3) ؛ // المعلمة الفعلية والمعلمة الرسمية لا تتطابق
إذا كان هناك الكثير من المعلمات الحقيقية ، فسيتم تجاهل المعلمات الحقيقية الزائدة. إذا كان هناك عدد قليل جدًا من المعلمات الحقيقية ، فإن قيمة المعلمات الرسمية غير المعينة غير محددة. يجب أن يكون للوظيفة قيمة إرجاع. إذا لم يتم تحديد قيمة الإرجاع من خلال عبارة الإرجاع ، فإن قيمة إرجاع الوظيفة غير محددة.
وظيفة والمتغيرات الخارجية التي تصل إلى إغلاق. هذا هو السحر الرئيسي لجافا سكريبت.
مكالمات الوظائف
عندما يتم استدعاء كل وظيفة ، يتم تلقي معلمتين إضافيتين:
1. هذا
2. الحجج
ترتبط قيمة هذا بنمط الاتصال المحدد. هناك أربعة أنماط استدعاء في JavaScript:
1. وضع الاتصال طريقة. إذا كانت خاصية الكائن وظيفة ، فسيطلق عليها طريقة. إذا تم استدعاء طريقة من خلال OM (args) ، فهذا كائن O (والذي يمكن ملاحظة أن هذا و O مرتبط فقط عند استدعاء) ، على سبيل المثال:
نسخة الكود كما يلي:
var obj = {
القيمة: 0 ،
الزيادة: وظيفة (V) {
this.value += (typeof v === 'number'؟ v: 1) ؛
}
} ؛
obj.increment () ؛ // هذا === OBJ
2. وضع استدعاء الوظيفة. إذا لم تكن الوظيفة خاصية كائن ، فسيتم تسميتها كدالة ، وهذا مرتبط بالكائن العالمي ، على سبيل المثال:
نسخة الكود كما يلي:
رسالة = "Hello World" ؛
var p = function () {
console.log (this.message) ؛
}
P () ؛ // الإخراج "Hello World"
هذا السلوك في بعض الأحيان مربك ، انظر مثال:
نسخة الكود كما يلي:
OBJ = {
القيمة: 0 ،
الزيادة: وظيفة () {
var helper = function () {
// أضف 1 إلى القيمة في الكائن العالمي
this.value += 1 ؛
}
// يسمى المساعد كدالة
// لذلك هذا كائن عالمي
المساعد()؛
}
} ؛
obj.increment () ؛ // obj.value === 0
يجب أن تكون النتائج التي نتوقعها:
نسخة الكود كما يلي:
OBJ = {
القيمة: 0 ،
الزيادة: وظيفة () {
var that = هذا ؛
var helper = function () {
that.value += 1 ؛
}
المساعد()؛
}
} ؛
obj.increment () ؛ // obj.value === 1
3. وضع المكالمات المُنشئ. تسمى الوظائف التي تنوي استخدام البادئة الجديدة ، على سبيل المثال:
نسخة الكود كما يلي:
// الاختبار يسمى مُنشئ
var test = function (string) {
this.message = سلسلة ؛
}
var mytest = اختبار جديد ("Hello World") ؛
يمكن استدعاء الوظيفة باستخدام جديد (عادة ما تبدأ هذه الوظائف بالرحمة). بعد إضافة جديد ، سيتم إنشاء كائن مرتبط بخاصية النموذج الأولي لهذه الوظيفة ، وهذا الكائن في المُنشئ هو هذا الكائن.
4. تطبيق وضع الاتصال. يتم استخدام طريقة تطبيق الوظيفة لاستدعاء الوظيفة ، التي تحتوي على معلمتين ، الأول هو هذا والثاني هو مجموعة من المعلمات ، على سبيل المثال:
نسخة الكود كما يلي:
var add = function (a ، b) {
إرجاع A + B ؛
}
var ret = add.apply (null ، [3 ، 4]) ؛ // ret === 7
عند استدعاء الوظيفة ، يمكننا الوصول إلى مجموعة من الفئات التي تسمى الوسيطات (صفيف JavaScript غير الواقعية) التي تحتوي على جميع الوسائط ، حتى نتمكن من تنفيذ معلمات طول المتغير:
نسخة الكود كما يلي:
var add = function () {
var sum = 0 ؛
لـ (var i = 0 ؛ i <endress.length ؛ ++ i) {
sum += الحجج [i] ؛
}
إرجاع مجموع
}
إضافة (1 ، 2 ، 3 ، 4) ؛
غير طبيعي
الآن دعنا نتحدث عن آلية معالجة الاستثناءات لجافا سكريبت. نستخدم بيان الرمي لرمي الاستثناءات ، وبيان ذاكرة التخزين المؤقت للقبض على الاستثناءات والتعامل معها:
نسخة الكود كما يلي:
var add = function (a ، b) {
if (typeof a! == 'number' || typeof b! == 'number') {
// رمي استثناء
يرمي {
الاسم: 'Typeerror' ،
الرسالة: "إضافة أرقام الاحتياجات"
} ؛
}
إرجاع A + B ؛
}
// استثناءات الصيد والتعامل معها
يحاول {
إضافة ("سبعة") ؛
// e هو كائن الاستثناء الذي تم إلقاؤه
} catch (e) {
console.log (e.name + ':' + e.message) ؛
}
أضف خصائص إلى أنواع JavaScript
يوجد في معظم الأنواع في JavaScript:
1. مُنشئ الكائن هو كائن
2. مُنشئ الصفيف هو صفيف
3. مُنشئ الوظيفة هو الوظيفة
4. مُنشئ السلسلة
5. مُنشئ الرقم هو الرقم
6. مُنشئ المنطق منطقي
7. مُنشئ التعبير العادي هو regexp
يمكننا إضافة خصائص (غالبًا ما تضيف طرقًا) إلى النموذج الأولي للمُنشئ بحيث تكون هذه الخاصية متاحة للمتغيرات ذات الصلة:
نسخة الكود كما يلي:
number.prototype.integer = function () {
إرجاع الرياضيات [هذا <0؟ 'ceil': 'floor'] (هذا) ؛
}
(1.1) .integer () ؛ // 1
نِطَاق
يحتاج JavaScript إلى بناء نطاقات من خلال الوظائف:
نسخة الكود كما يلي:
وظيفة() {
// ...
} () ؛
يتم إنشاء وظيفة مجهولة وتنفيذها هنا. نطاق لإخفاء المتغيرات التي لا تريد أن تتعرض لها:
نسخة الكود كما يلي:
var obj = function () {
// إخفاء القيمة ، لا يمكن الوصول إليها خارجيًا
var value = 0 ؛
يعود {
// فقط هذه الطريقة يمكن أن تعدل القيمة
الزيادة: وظيفة () {
القيمة += 1 ؛
} ،
// فقط هذه الطريقة يمكن أن تقرأ القيمة
getValue: function () {
قيمة الإرجاع
}
} ؛
} () ؛
obj.increment () ؛
obj.getValue () === 1 ؛
ورث
هناك العديد من الطرق لتنفيذ الميراث في JavaScript.
عند إنشاء كائن ، يمكننا إعداد كائن النموذج الأولي المرتبط بالكائن ، ونفعل:
نسخة الكود كما يلي:
// قم بإنشاء كائن O مع كائن النموذج الأولي {x: 1 ، y: 2}
var o = object.create ({x: 1 ، y: 2}) ؛
يتم تعريف طريقة comple.create في ECMAScript 5. إذا كنت تستخدم ECMASCRIPT 3 ، فيمكنك تنفيذ طريقة إنشاء بنفسك:
نسخة الكود كما يلي:
// إذا لم يتم تعريف طريقة الكائن.
if (typeof object.create! == 'function') {
// إنشاء Object.create طريقة
object.create = function (o) {
var f = function () {} ؛
f.prototype = o ؛
// إنشاء كائن جديد ، كائن النموذج الأولي لهذا الكائن هو o
إرجاع جديد f () ؛
} ؛
}
من خلال طريقة الكائن. ، نقوم بإجراء الميراث القائم على النموذج الأولي: كائن جديد يرث مباشرة خصائص كائن قديم (بالنسبة إلى الميراث القائم على الفصل ، لا توجد حاجة لوجود الفئة هنا ، والكائن يرث الكائن مباشرة). مثال:
نسخة الكود كما يلي:
var mymammal = {
الاسم: "هيرب الثدييات" ،
get_name: function () {
إرجاع هذا.
} ،
يقول: وظيفة () {
إرجاع هذا '' ؛
}
} ؛
// ورث mymammal
var mycat = object.create (mymammal) ؛
mycat.name = 'henrietta' ؛
mycat.saying = 'meow' ؛
mycat.purr = function (n) {
var i ، s = '' ؛
لـ (i = 0 ؛ i <n ؛ i += 1) {
إذا (s) {
S += '-' ؛
}
s += 'r' ؛
}
العودة s ؛
} ؛
mycat.get_name = function () {
إرجاع this.says () + '' + this.name + '' + this.says () ؛
} ؛
الرمز أعلاه بسيط ، لكنه لا يمكنه حماية الأعضاء الخاصين. يمكننا استخدام وضع الوحدة النمطية. في وضع الوحدة النمطية ، يتم إنشاء نوع معين من الكائن بواسطة دالة ويستخدم نطاق الوظيفة لحماية الأعضاء الخاصين من الوصول الخارجي:
نسخة الكود كما يلي:
// وظيفة الثدييات ، تستخدم لبناء أشياء الثدييات
var mammal = function (spec) {
// هذا هو الكائن المبني
var that = {} ؛
// يمكن الوصول إلى الطريقة العامة get_name خارجيًا
that.get_name = function () {
// spec.name لا يمكن الوصول إليها مباشرة من الخارج
إرجاع spec.name ؛
} ؛
// يقول الطريقة العامة أنه يمكن الوصول إلى الخارج
that.says = function () {
// spec.saying لا يمكن الوصول المباشر إلى خارجي
إرجاع spec.saying || '' ؛
} ؛
إعادة ذلك ؛
} ؛
// إنشاء جسم ثديي
var mymammal = mammal ({name: 'herb'}) ؛
// وظيفة القط ، تستخدم لبناء كائن Cat
var cat = function (spec) {
spec.saying = spec.saying || 'مواء'؛
// cat يرث من الثدييات ، لذلك قم أولاً ببناء جسم الثدييات
var that = mammal (spec) ؛
// أضف الطريقة العامة بير
that.purr = function (n) {
var i ، s = '' ؛
لـ (i = 0 ؛ i <n ؛ i += 1) {
إذا (s) {
S += '-' ؛
}
s += 'r' ؛
}
العودة s ؛
} ؛
// تعديل الطريقة العامة get_name
that.get_name = function () {
إرجاع that.says () + '' + spec.name +
'' + that.says () ؛
إعادة ذلك ؛
} ؛
} ؛
// إنشاء كائن Cat
var mycat = cat ({name: 'Henrietta'}) ؛
في وضع الوحدة النمطية ، يتم تحقيق الميراث عن طريق استدعاء المنشئ. بالإضافة إلى ذلك ، يمكننا أيضًا الوصول إلى أساليب فئة الأصل في الفئة الفرعية:
نسخة الكود كما يلي:
Object.prototype.superior = function (name) {
var that = this ، method = that [name] ؛
وظيفة الإرجاع () {
طريقة الإرجاع. apply (ذلك ، الحجج) ؛
} ؛
} ؛
var coolcat = function (spec) {
// احصل على طريقة get_name للكاسورة الفرعية
var that = cat (spec) ، super_get_name = that.superior ('get_name') ؛
that.get_name = function (n) {
إرجاع "مثل" + super_get_name () + 'baby' ؛
} ؛
إعادة ذلك ؛
} ؛