new operator

This translation is incomplete. Please help translate this article from English

9 9090 jsSidebar ("عوامل التشغيل")}}

في newالمشغل يتيح للمطورين إنشاء مثيل من نوع الكائن المعرفة من قبل المستخدم أو واحد من أنواع الكائنات المضمنة التي لديه وظيفة المنشئ.

{{EmbedInteractiveExample ("pages / js / expressions-newoperator.html")}}

بناء الجملة

new constructor[([arguments])]

المعلمات

constructor
فئة أو وظيفة تحدد نوع مثيل الكائن.
arguments
قائمة القيم التي constructorسيتم الاتصال بها.

وصف

تقوم newالكلمة الرئيسية بالأشياء التالية:

  1. ينشئ كائن JavaScript عاديًا فارغًا ؛
  2. روابط (تحدد منشئ) هذا الكائن إلى كائن آخر ؛
  3. يمر كائن تم إنشاؤه حديثا من الخطوة 1 كما في thisالسياق؛
  4. يعود thisإذا لم الدالة بإرجاع كائن.

يتطلب إنشاء كائن معرف من قبل المستخدم خطوتين:

  1. حدد نوع الكائن عن طريق كتابة دالة.
  2. إنشاء مثيل للكائن باستخدام new.

لتحديد نوع كائن ، قم بإنشاء وظيفة لنوع الكائن تحدد اسمه وخصائصه. يمكن أن يكون للكائن خاصية تكون في حد ذاتها كائنًا آخر. انظر الأمثلة أدناه.

عند تنفيذ الكود ، تحدث الأشياء التالية:new Foo(...)

  1. يتم إنشاء كائن جديد ، وراثة من Foo.prototype.
  2. Fooيتم استدعاء دالة المُنشئ بالوسيطات المحددة ، وتكون thisمرتبطة بالكائن الذي تم إنشاؤه حديثًا. يكافئ ، على سبيل المثال ، إذا لم يتم تحديد قائمة وسيطة ، يتم استدعاؤه بدون وسيطات.new Foonew Foo()Foo
  3. يصبح الكائن (ليس فارغًا ، أو خطأ ، أو 3.1415 أو أنواعًا أولية أخرى) التي تُرجعها دالة المُنشئ نتيجة newالتعبير بالكامل . إذا لم تُرجع دالة المُنشئ كائنًا بشكل صريح ، فسيتم استخدام الكائن الذي تم إنشاؤه في الخطوة 1 بدلاً من ذلك. (عادةً لا تُرجع المنشئات قيمة ، لكن يمكنهم اختيار القيام بذلك إذا كانوا يريدون تجاوز عملية إنشاء الكائن العادية.)

يمكنك دائمًا إضافة خاصية إلى كائن محدد مسبقًا. على سبيل المثال ، car1.color = "black"تضيف العبارة خاصية colorإلى car1، وتخصص لها قيمة " black". ومع ذلك ، هذا لا يؤثر على أي كائنات أخرى. لإضافة الخاصية الجديدة إلى جميع الكائنات من نفس النوع ، يجب إضافة الخاصية إلى تعريف Carنوع الكائن.

يمكنك إضافة خاصية مشتركة إلى نوع كائن محدد مسبقًا باستخدام Function.prototypeالخاصية. يحدد هذا الخاصية التي يتم مشاركتها بواسطة جميع الكائنات التي تم إنشاؤها باستخدام هذه الوظيفة ، بدلاً من مثيل واحد فقط من نوع الكائن. تضيف التعليمة البرمجية التالية خاصية لون مع قيمة "original color"لكل كائنات النوع Car، ثم تكتب فوق تلك القيمة بالسلسلة " black" فقط في كائن المثيل car1. لمزيد من المعلومات ، انظر النموذج الأولي .

function Car() {}
car1 = new Car();
car2 = new Car();
 
console.log(car1.color);    // undefined
 
Car.prototype.color = 'original color';
console.log(car1.color);    // 'original color'
 
car1.color = 'black';
console.log(car1.color);    // 'black'

console.log(Object.getPrototypeOf(car1).color); // 'original color'
console.log(Object.getPrototypeOf(car2).color); // 'original color'
console.log(car1.color);   // 'black'
console.log(car2.color);   // 'original color'

إذا لم تكتب newعامل التشغيل ، فسيتم استدعاء دالة الباني مثل أي دالة عادية ، دون إنشاء كائن. في هذه الحالة ، قيمة thisمختلفة أيضًا.

أمثلة

نوع الكائن ومثيل الكائن

لنفترض أنك تريد إنشاء نوع كائن للسيارات. تريد أن يتم استدعاء هذا النوع من الكائنات Car، وتريد أن يكون لها خصائص لـ make و model و year. للقيام بذلك ، يمكنك كتابة الوظيفة التالية:

function Car(make, model, year) {
  this.make = make;
  this.model = model;
  this.year = year;
}

الآن يمكنك إنشاء كائن يسمى على myCarالنحو التالي:

var myCar = new Car('Eagle', 'Talon TSi', 1993);

تقوم هذه العبارة بإنشاء myCarوتعيين القيم المحددة لخصائصها. ثم قيمة myCar.makeالسلسلة "النسر" ، myCar.yearهو العدد الصحيح 1993 ، وهلم جرا.

يمكنك إنشاء أي عدد من carالكائنات عن طريق المكالمات إلى new. فمثلا:

var kensCar = new Car('Nissan', '300ZX', 1992);

خاصية الكائن التي هي نفسها كائن آخر

لنفترض أنك قمت بتعريف كائن يسمى على PersSexonالنحو التالي:

function Person(name, age, sex) {XxxXxx
  this.name = name;
  this.age = age;
  this.sex = sex;
}

ثم قم بإنشاء كائنين جديدين على Personالنحو التالي:

var rand = new Person('Rand McNally', 33, 'M');
var ken = new Person('Ken Jones', 39, 'M');

ثم يمكنك إعادة كتابة تعريف Carلتضمين ownerخاصية تأخذ Personكائنًا ، على النحو التالي:

function Car(make, model, year, owner) {
  this.make = make;
  this.model = model;
  this.year = year;
  this.owner = owner;
}

لإنشاء كائنات جديدة ، يمكنك بعد ذلك استخدام ما يلي:

var car1 = new Car('Eagle', 'Talon TSi', 1993, rand);
var car2 = new Car('Nissan', '300ZX', 1992, ken);

بدلا من تمرير سلسلة حرفية أو عدد صحيح القيمة عند إنشاء كائنات جديدة، والبيانات المذكورة أعلاه تمر الكائنات randو kenكمعلمات للمالكي. لمعرفة اسم مالك الموقع car2، يمكنك الوصول إلى الخاصية التالية:

car2.owner.name

مواصفات

تخصيص
{{SpecName ('ESDraft'، '# sec-new-worker'، 'The new Operator')}}

التوافق المتصفح

{{Compat ("javascript.operators.new")}}

أنظر أيضا

  • {{jsxref ("الوظيفة")}}
  • {{jsxref ("Reflect.construct ()")}}
  • {{jsxref ("Object.prototype")}}