يقدم
تقدم هذه المقالة بشكل أساسي نمط إنشاء الكائنات. يمكن أن يؤدي استخدام التقنيات المختلفة إلى تجنب الأخطاء بشكل كبير أو كتابة رمز مبسط للغاية.
النمط 1: مساحة الاسم
يمكن أن تقلل مساحات الأسماء من مقدار التسمية العالمية المطلوبة لتجنب تسمية النزاعات أو الزائدة. بشكل عام ، عندما نحدد مستوى الكائن ، يبدو غالبًا هكذا:
نسخة الكود كما يلي:
var app = app || {} ؛
app.modulea = app.modulea || {} ؛
app.modulea.submodule = app.modulea.submodule || {} ؛
app.modulea.submodule.methoda = function () {
console.log ("print a") ؛
} ؛
app.modulea.submodule.methodb = function () {
console.log ("print b") ؛
} ؛
إذا كان هناك العديد من المستويات ، فيجب أن نستمر هكذا ، وهو أمر محير للغاية. يوجد نمط مساحة الاسم لحل هذه المشكلة. دعونا نلقي نظرة على الكود:
نسخة الكود كما يلي:
// غير آمن ، قد يكتب كائنات myApp الموجودة
var myapp = {} ؛
// بخير
if (typeof myapp === "undefined") {
var myapp = {} ؛
}
// طريقة أبسط
var myapp = myapp || {} ؛
// تحديد الطرق الشائعة
myapp.namespace = function (ns_string) {
var parts = ns_string.split ('.') ،
الوالد = myapp ،
أنا؛
// بشكل افتراضي ، إذا كانت العقدة الأولى هي myapp ، فسيتم تجاهلها ، مثل myapp.modulea
if (أجزاء [0] === "myapp") {
أجزاء = parts.slice (1) ؛
}
لـ (i = 0 ؛ i <parts.length ؛ i += 1) {
// إذا لم يكن العقار موجودًا ، فقم بإنشاء
if (typeof parent [parts [i]] === "غير محدد") {
الأصل [الأجزاء [i]] = {} ؛
}
الوالد = الأصل [الأجزاء [i]] ؛
}
إرجاع الوالد ؛
} ؛
استدعاء الرمز بسيط للغاية:
نسخة الكود كما يلي:
// بعد مساحة الاسم ، يمكن تعيين قيمة الإرجاع إلى متغير محلي
var module2 = myapp.namespace ('myapp.modules.module2') ؛
console.log (module2 === myapp.modules.module2) ؛ // حقيقي
// تخطي myapp
myapp.namespace ('modules.module51') ؛
// اسم طويل جدا
myapp.namespace ('appon.upon.a.time.There.was.This.long.nested.property') ؛
النمط 2: تحديد التبعيات
في بعض الأحيان ، قد تشير وحدة أو وظيفة إلى بعض وحدات أو أدوات الطرف الثالث. من الأفضل تحديد هذه الوحدات التابعة في البداية بحيث يمكن استبدالها بسهولة في المستقبل.
نسخة الكود كما يلي:
var myfunction = function () {
// تعتمد على الوحدات النمطية
var event = yahoo.util.event ،
dom = yahoo.util.dom ؛
// يتم استخدام حدث المتغيرات المحلية و DOM في الكود بعد وظائف أخرى
} ؛
النمط 3: الخصائص الخاصة والأساليب الخاصة
لا توفر JavaScript بناء جملة محددة لدعم الخصائص الخاصة والأساليب الخاصة ، ولكن يمكننا تنفيذها من خلال الإغلاق ، والرمز هو كما يلي:
نسخة الكود كما يلي:
وظيفة الأدوات () {
// كائن خاص
var name = 'iPod' ؛
// وظائف عامة
this.getName = function () {
اسم العودة
} ؛
}
var toy = new Gadget () ؛
// الاسم غير محدد وهو خاص
console.log (toy.name) ؛ // غير محدد
// اسم الوصول إلى الطريقة العامة
console.log (toy.getName ()) ؛ // "ipod"
var myobj ؛ // تعيين القيم إلى myobj من خلال وظيفة التنفيذ الذاتي
(وظيفة () {
// كائن مجاني
var name = "my ، يا بلدي" ؛
// تنفيذ الجزء العام ، لذلك لا يوجد var
myobj = {
// طريقة التفويض
getName: function () {
اسم العودة
}
} ؛
} ()) ؛
الوضع 4: وضع الوحي
إنه يتعلق أيضًا بإخفاء الأساليب الخاصة ، وهو ما يشبه إلى حد ما نمط الوحدة النمطية في "الفهم المتعمق لسلسلة JavaScript (3): تحليل شامل لأنماط الوحدة النمطية" ، لكنه ليس طريقة إرجاع ، ولكن يتم الإعلان عن متغير خارجيًا ثم تم تعيين طرق عامة للمتغير داخليًا. الرمز كما يلي:
نسخة الكود كما يلي:
فار myarray
(وظيفة () {
var astr = "[Abourt Array]" ،
toString = object.prototype.toString ؛
وظيفة isarray (a) {
إرجاع tostring.call (a) === Astr ؛
}
وظيفة indexof (Haystack ، Needle) {
var i = 0 ،
max = haystack.length ؛
لـ (؛ i <max ؛ i += 1) {
if (Haystack [i] === eedle) {
العودة أنا.
}
}
العودة -1 ؛
}
// من خلال المهمة ، يتم إخفاء جميع التفاصيل أعلاه
myarray = {
Isarray: Isarray ،
indexof: indexof ،
inarray: indexof
} ؛
} ()) ؛
// رمز الاختبار
console.log (myarray.isarray ([1 ، 2])) ؛ // حقيقي
console.log (myarray.isarray ({0: 1})) ؛ // خطأ شنيع
console.log (myarray.indexof (["A" ، "B" ، "Z"] ، "Z")) ؛ // 2
console.log (myarray.inarray (["A" ، "B" ، "Z"] ، "Z")) ؛ // 2
myarray.indexof = null ؛
console.log (myarray.inarray (["A" ، "B" ، "Z"] ، "Z")) ؛ // 2
الوضع 5: وضع السلسلة
يتيح لك وضع السلسلة استدعاء طريقة كائن بشكل مستمر ، مثل OBJ.Add (1) .remove (2) .DELETE (4) .Add (2). فكرة التنفيذ بسيطة للغاية ، وهي إعادة هذا الأمر كما هي. الرمز كما يلي:
نسخة الكود كما يلي:
var obj = {
القيمة: 1 ،
الزيادة: وظيفة () {
this.value += 1 ؛
إرجاع هذا ؛
} ،
إضافة: وظيفة (V) {
this.value += v ؛
إرجاع هذا ؛
} ،
يصرخ: وظيفة () {
console.log (this.value) ؛
}
} ؛
// استدعاء طريقة السلسلة
obj.increment (). add (3) .shout () ؛ // 5
// يمكن أن يطلق عليها أيضًا واحدًا تلو الآخر
obj.increment () ؛
obj.add (3) ؛
obj.shout () ؛
لخص
هذه المقالة هي المقالة السابقة لوضع إنشاء الكائن ، لذلك ترقبوا المقال التالي غدًا.