في JavaScript ، تنقسم أنواع البيانات بشكل أساسي إلى أنواع بدائية وأنواع المرجعية. جميع الأنواع المرجعية تأتي من نسخة من الكائن. هذه المقالة هي مقدمة لبعض الوظائف المخفية لكائن الكائن الذي جلبه لك محرر قناة Error New Technology. دعونا نلقي نظرة!
يتم تعريف هذه الخاصية في النموذج الأولي للفئة. بعد إنشاء مثيل الكائن ، يمكن استدعاؤه بواسطة مثيل الكائن من خلال سلسلة __proto__ ويشير إلى مُنشئ الفئة الحالية. يمكن أن يحدد هذا الفئة التي ينتمي إليها كائن مباشرة (على عكس مثيل exateof ، لا يقتصر مثيل الفئة التي ينتمي إليها الكائن مباشرة ، حتى فئة الأصل يعيد صحيحًا).
[مثال]
تتبع (object.prototype.constructor == object) ؛ // الإخراج صحيح
var a = new Object () ؛
تتبع (A.Constructor == كائن) ؛ // الإخراج صحيح
var b = new array () ؛
تتبع (B.Constructor == Array) ؛ // الإخراج صحيح
تتبع (B.Constructor == كائن) ؛ // الإخراج false
تتبع (B extreamof Object) ؛ // الإخراج صحيح
الخاصية: كائن .__ مُنشئ __
تشبه وظيفة الخاصية هذه الكائن. في الوقت نفسه ، تسمى هذه الخاصية أيضًا ضمنيًا عند استخدامها من قبل الكلمة الرئيسية الفائقة مثل مُنشئ الفئة الأصل ، وتستخدم للإشارة إلى مُنشئ الفئة الأصل ، أي Super (...) يعادل هذا .__ Constructor __. Call (هذا ، ...).
[مثال]
تتبع (Object.prototype .__ constructor__ == Object) ؛ // الإخراج false
var a = new Object () ؛
تتبع (a .__ constructor__ == object) ؛ // الإخراج صحيح
var b = new array () ؛
تتبع (ب .__ مُنشئ __ == صفيف) ؛ // الإخراج صحيح
تتبع (ب .__ مُنشئ __ == كائن) ؛ // الإخراج false
الطريقة: object.isprotypeof (classFunc)
يتم استخدام هذه الطريقة لتحديد ما إذا كان الكائن الحالي موجودًا في سلسلة OBJ OBJ. يمكن استخدام هذه الطريقة لتحديد ما إذا كان الفصل أحد الوالدين أو طفل من فئة أخرى.
[مثال]
Trace (Object.prototype.isprototypeof (كائن جديد ())) ؛ // الإخراج صحيح
Trace (Object.prototype.isprototypeof (Array ())) ؛ // الإخراج صحيح
Trace (Array.Protype.isprototypeof (كائن جديد ())) ؛ // الإخراج false
Trace (Object.prototype.isprototypeof (Array.Protype)) ؛ // احكم على ما إذا كان الكائن هو فئة الوالد الخاصة بـ Array ، الإخراج صحيح
الطريقة: object.ispropertyenumerable (propname)
يتم استخدام هذه الطريقة لتحديد ما إذا كان هناك عضو يدعى propname في الكائن الحالي ويمكن تعداده (باستخدام .. في) ، وبعبارة أخرى ، ما إذا كان مرئيًا (باستخدام الدالة العالمية AssetPropFlags لتعيين ما إذا كانت خصائص الكائن مرئية).
[مثال]
var a = {x: 1 ، y: 2} ؛
AssetPropFlags (a ، ["y"] ، 1) ؛ // set y غير مرئي
تتبع (AY) ؛ // فقط الإخراج 2
لـ (var i in a) trace (i) ؛ // فقط الإخراج x
Trace (A.IsPropertyEnumerable ("X")) ؛ // الإخراج صحيح
Trace (A.IsPropertyEnumerable ("y")) ؛ // الإخراج false
الطريقة: object.hasownproperty (propname)
يتم استخدام هذه الطريقة لتحديد ما إذا كان عضوًا يدعى PropName هو عضو في الكائن الحالي نفسه ، بدلاً من الإشارة إليه من النموذج الأولي للفئة من خلال سلسلة __proto__.
[مثال]
وظيفة اختبار () {}
test.prototype.x = 1 ؛
var a = new test () ؛
ay = 2 ؛
تتبع (الفأس) ؛ // الإخراج 1
TRACE (A.HasownProperty ("X")) ؛ // الإخراج false
تتبع (AY) ؛ // الإخراج 2
TRACE (A.HasownProperty ("y")) ؛ // الإخراج صحيح
الطريقة: object.toString ()
يمكن أن تحدد هذه الطريقة نتيجة السلسلة التي تم إنشاؤها بواسطة كائن عند تحويلها إلى نوع سلسلة ، والذي يتم تعريفه بشكل عام في النموذج الأولي للفئة.
[مثال]
نقطة الوظيفة (x ، y) {
this.x = x ؛
this.y = y ؛
}
point.prototype.toString = function () {
إرجاع "[x:" + this.x + "، y:" + this.y + "]" ؛
} ؛
var pos = نقطة جديدة (10 ، 20) ؛
تتبع ("الموضع هو" + pos) ؛ // موضع الإخراج هو [x: 10 ، y: 20]
ما سبق هو مقدمة لبعض الوظائف المخفية للكائنات الكائنات. أعتقد أن كل شخص لديه فهم واضح. المزيد من المعرفة حول القناة التقنية في قناة التكنولوجيا الجديدة الخاطئة!