ज़रुरी नहीं।
वास्तव में आपको जो चाहिए, उसके आधार पर, एक नई वस्तु के प्रोटोटाइप के रूप में सेट होने की संभावना हो सकती है o।
var o = {};
(function(x){
var obj = Object.create( x );
obj.foo = 'foo';
obj.bar = 'bar';
})(o);
alert( o.foo ); // undefined
इसलिए आपके द्वारा जोड़े गए किसी भी गुण को objनहीं जोड़ा जाएगा o। objसंपत्ति के रूप में एक ही संपत्ति के नाम के साथ जोड़ा गया कोई भी गुण संपत्ति oको छाया देगा o।
निश्चित रूप से, जोड़ा गया कोई भी गुण यदि वे छायांकित नहीं हैं, तो वे oउपलब्ध होंगे obj, और oप्रोटोटाइप चेन में मौजूद सभी ऑब्जेक्ट को एक ही अपडेट दिखाई देगा o।
इसके अलावा, अगर objकोई ऐसी संपत्ति है जो किसी अन्य ऑब्जेक्ट को संदर्भित करती है, जैसे कि ऐरे, आपको ऑब्जेक्ट में सदस्यों को जोड़ने से पहले उस ऑब्जेक्ट को छाया देना सुनिश्चित करना होगा, अन्यथा, उन सदस्यों को जोड़ा objजाएगा, और उन सभी वस्तुओं के बीच साझा किया जाएगा जो है objप्रोटोटाइप श्रृंखला में।
var o = {
baz: []
};
(function(x){
var obj = Object.create( x );
obj.baz.push( 'new value' );
})(o);
alert( o.baz[0] ); // 'new_value'
यहाँ आप देख सकते हैं कि क्योंकि आप पर सरणी शैडो नहीं था bazपर oएक साथ bazपर संपत्ति obj, o.bazसरणी संशोधित हो जाता है।
इसलिए इसके बजाय, आपको इसे पहले छाया देना होगा:
var o = {
baz: []
};
(function(x){
var obj = Object.create( x );
obj.baz = [];
obj.baz.push( 'new value' );
})(o);
alert( o.baz[0] ); // undefined