--- title: new operator slug: Web/JavaScript/Reference/Operators/new tags: - HTTP - OpenPractices - البروتوكولات - بحث - لغة البرمجة translation_of: Web/JavaScript/Reference/Operators/new ---
في new
المشغل يتيح للمطورين إنشاء مثيل من نوع الكائن المعرفة من قبل المستخدم أو واحد من أنواع الكائنات المضمنة التي لديه وظيفة المنشئ.
new constructor[([arguments])]
constructor
arguments
constructor
سيتم الاتصال بها.تقوم new
الكلمة الرئيسية بالأشياء التالية:
this
السياق؛this
إذا لم الدالة بإرجاع كائن.يتطلب إنشاء كائن معرف من قبل المستخدم خطوتين:
new
.لتحديد نوع كائن ، قم بإنشاء وظيفة لنوع الكائن تحدد اسمه وخصائصه. يمكن أن يكون للكائن خاصية تكون في حد ذاتها كائنًا آخر. انظر الأمثلة أدناه.
عند تنفيذ الكود ، تحدث الأشياء التالية:new Foo(...)
Foo.prototype
.Foo
يتم استدعاء دالة المُنشئ بالوسيطات المحددة ، وتكون this
مرتبطة بالكائن الذي تم إنشاؤه حديثًا. يكافئ ، على سبيل المثال ، إذا لم يتم تحديد قائمة وسيطة ، يتم استدعاؤه بدون وسيطات.new Foo
new Foo()
Foo
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);
لنفترض أنك قمت بتعريف كائن يسمى على Pers
Sexon
النحو التالي:
function Person(name, age, sex) { 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")}}