البرمجة

فارق بين Object.create() و Object.assign()

عند التفكير في الشيفرة المقدمة، يظهر أن هناك فارقاً بين الطريقتين المستخدمتين لإنشاء الكائنات، Object.create() وObject.assign()، حيث يتم كل منهما بطريقة مختلفة وله استخداماته الخاصة.

أولاً وقبل كل شيء، يجب فهم أساسيات كل من هاتين الوظيفتين. تُستخدم Object.create() لإنشاء كائن جديد باستخدام كائن آخر كمُبدأ للوراثة. في المثال الذي قدمته، يتم إنشاء obj1 باستخدام Object.create()، وهو يأخذ كائنًا فارغًا كوحدة أب، ويُضاف إليه خاصية myProp بقيمة 1.

من ناحية أخرى، تُستخدم Object.assign() لنسخ خصائص كائن إلى كائن آخر. في حالة obj2، يتم إنشاء كائن فارغ ويتم نسخ الخاصية myProp إليه بقيمة 1 باستخدام Object.assign().

الفارق الرئيسي بين obj1 وobj2 يعود إلى الاستخدام الأساسي لكل وظيفة. obj1 يستخدم Object.create() لإنشاء كائن مشتق من كائن آخر، مما يتيح له الاستفادة من التوريث. بينما obj2 يستخدم Object.assign() لنسخ الخصائص فقط، ولا يتورث من أي كائن.

إذا كنت ترغب في إنشاء كائن مشتق يستفيد من التوريث، فيفضل استخدام Object.create()، بينما إذا كنت تحتاج إلى نسخ خصائص فقط بدون التوريث، يمكنك استخدام Object.assign(). هذا يعتمد على المتطلبات الخاصة بتصميم البرنامج الخاص بك وعلى ما إذا كنت بحاجة إلى التوريث أم لا.

المزيد من المعلومات

بالتأكيد، دعونا نفصل أكثر عن الاختلافات بين Object.create() و Object.assign() ونتناول بعض المعلومات الإضافية.

Object.create():

Object.create() هو أسلوب يسمح بإنشاء كائن جديد وتحديد كائن آخر يكون مبدأً للوراثة. يعني ذلك أن الكائن الذي يتم إنشاؤه باستخدام Object.create() يكون له وحيد منفصل، ولكنه يرتبط بكائن آخر ككائن أب. في المثال الخاص بك، تم إنشاء obj1 باستخدام Object.create()، حيث تم استخدام كائن فارغ ككائن أب.

Object.assign():

Object.assign() يُستخدم لنسخ الخصائص من كائن إلى آخر. يأخذ Object.assign() كائنًا فارغًا أو هدفًا ويقوم بنسخ خصائص كائن أو أكثر إلى هذا الهدف. في المثال الخاص بك، تم إنشاء obj2 باستخدام Object.assign()، حيث تم نسخ خاصية myProp من الكائن المرفق.

التوريث والمشتقات:

Object.create() يتيح للكائنات أن تستفيد من التوريث، حيث يمكنك تحديد كائن أب واستخدامه كمبدأ أساسي. يمكنك أيضاً تحديد مزيد من الخصائص للكائن المشتق. هذا يسمح بإنشاء هيكل توريث مرن.

Object.assign() لا يتعلق بالتوريث. إنه يركز ببساطة على نسخ الخصائص. لا يتم إنشاء علاقة وراثية بين الكائن المستهدف والكائن الذي تم نسخ الخصائص منه.

أمثلة عملية:

لنفترض أن لدينا كائنين obj3 و obj4 حيث obj3 يتم إنشاؤه باستخدام Object.create() و obj4 باستخدام Object.assign():

javascript
var obj3 = Object.create({ baseProp: 10 }); var obj4 = Object.assign({}, { myProp: 5 });

في هذا السياق، obj3 سيكون لديه خاصية baseProp ويمكنه الوصول إلى القيمة 10 من كائن الأب. بينما obj4 سيكون لديه خاصية myProp فقط دون أي تأثير وراثي.

الختام:

في الختام، يجب عليك اختيار الطريقة التي تناسب احتياجات تصميم برنامجك. إذا كنت تحتاج إلى توريث وهيكل توريث، يمكنك استخدام Object.create()، وإذا كنت تحتاج فقط إلى نسخ الخصائص، يمكنك استخدام Object.assign(). يعتمد كل شيء على سياق التطبيق والمتطلبات الخاصة بك.

زر الذهاب إلى الأعلى