Object.prototype.constructor
الخاصية Object.prototype.constructor
تُعيد مرجعيةً إلى الدالة البانية Object
التي تُنشِئ نسخةً (instance) من الكائن؛ لاحظ أنَّ قيمة هذه الخاصية تُشير إلى الدالة نفسها وليست سلسلةً نصيةً تحتوي على اسم الدالة؛ وتكون هذه القيمة للقراءة فقط في القيم الأوليّة مثل 1
و true
و "test"
.
الوصف
جميع الكائنات تملك الخاصية constructor
، والكائنات المُنشأة دون استخدام الدالة البانية مباشرةً (أي الشكل المختصرة لإنشاء الكائنات والمصفوفات) ستملك الخاصية constructor
التي تُشير إلى الدالة البانية الأساسية لنوع الكائنات التي تتبع له.
var o = {};
o.constructor === Object; // true
var o = new Object;
o.constructor === Object; // true
var a = [];
a.constructor === Array; // true
var a = new Array;
a.constructor === Array // true
var n = new Number(3);
n.constructor === Number; // true
أمثلة
عرض الدالة البانية للكائن
المثال الآتي يُنشِئ الدالة البانية Tree
وسيُهيّئ كائنًا من ذلك النوع باسم theTree
، ثم سيعرض قيمة الخاصية constructor
للكائن theTree
:
function Tree(name) {
this.name = name;
}
var theTree = new Tree('Redwood');
console.log('theTree.constructor is ' + theTree.constructor);
ناتج تنفيذ الشيفرة السابقة:
theTree.constructor is function Tree(name) {
this.name = name;
}
تغيير الدالة البانية لأحد الكائنات
يُظهِر المثال الآتي كيفية تعديل قيمة الخاصية constructor
للكائنات المضمَّنة في اللغة، لاحظ أنَّ القيم true
و 1
و "test"
لن تتأثر في المثال الآتي لأنها تملك دوالًا بانيةً للقراءة فقط، والمثال الآتي يبيّن أنَّه من غير الآمن الاعتماد كليًّا على الخاصية constructor
لأحد الكائنات:
function Type () {}
var types = [
new Array(),
[],
new Boolean(),
true, // لن تتأثر
new Date(),
new Error(),
new Function(),
function () {},
Math,
new Number(),
1, // لن تتأثر
new Object(),
{},
new RegExp(),
/(?:)/,
new String(),
'test' // لن تتأثر
];
for (var i = 0; i < types.length; i++) {
types[i].constructor = Type;
types[i] = [types[i].constructor, types[i] instanceof Type, types[i].toString()];
}
console.log(types.join('\n'));
سيُظهِر المثال السابق الناتج الآتي:
function Type() {},false,
function Type() {},false,
function Type() {},false,false
function Boolean() {
[native code]
},false,true
function Type() {},false,Mon Sep 01 2014 16:03:49 GMT+0600
function Type() {},false,Error
function Type() {},false,function anonymous() {
}
function Type() {},false,function () {}
function Type() {},false,[object Math]
function Type() {},false,0
function Number() {
[native code]
},false,1
function Type() {},false,[object Object]
function Type() {},false,[object Object]
function Type() {},false,/(?:)/
function Type() {},false,/(?:)/
function Type() {},false,
function String() {
[native code]
},false,test
دعم المتصفحات
الميزة | Chrome | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
الدعم الأساسي | نعم | نعم | نعم | نعم | نعم |
مصادر ومواصفات
- مسودة المعيار ECMAScript Latest Draft.
- معيار ECMAScript 2015 (6th Edition).
- معيار ECMAScript 5.1.
- معيار ECMAScript 1st Edition .