2012-02-09 16 views
7

मुझे आश्चर्य है कि यह भी संभव है या नहीं। असल में मेरे पास कुछ ऑब्जेक्ट्स हैं जो मैं एक फ़ंक्शन पर जाता हूं, और कुछ स्थितियों के तहत मैं उस कार्य को ऑब्जेक्ट को शून्य पर सेट करने के लिए चाहता हूं।जावास्क्रिप्ट - मैं एक फ़ंक्शन से शून्य के लिए ऑब्जेक्ट संदर्भ कैसे सेट/कर सकता हूं?

पूर्व।

var o = {'val' : 0}; 

f = function(v) 
{ 
    v = null; 
}; 

f(o); // Would like this to set 'o' to null 

दुर्भाग्य से ऐसा लगता है कि मैं केवल कार्य के तर्क को शून्य में सेट कर सकता हूं। फ़ंक्शन 'ओ' को कॉल करने के बाद भी एक ऑब्जेक्ट का संदर्भ लेंगे।

तो, क्या ऐसा करना भी संभव है? और यदि हां, तो कैसे?

उत्तर

7

आप o का मान बदलने के लिए जब f(o) कहा जाता है चाहते हैं, आपके पास दो विकल्प :

1) आप f(o) है ओ के लिए एक नया मान और है कि प्रदान कर सकते हैं ओ इस तरह:

var o = {'val' : 0}; 
o = f(o); 
// o == null 

0 के अंदर, आप o के लिए एक नया मान वापस कर सकते हैं।

function f(v) { 
    if (whatever) { 
     return(null); 
    } 
} 

2) आप किसी अन्य वस्तु में ओ रख दिया और f() में है कि कंटेनर ऑब्जेक्ट के संदर्भ गुजरती हैं।

function f(v) { 
    if (whatever) { 
     v.o = null; 
    } 
} 

var c = {}; 
c.o = {'val' : 0}; 

f(c); 
// c.o == null; 

जावास्क्रिप्ट भाषा C/C++ आप एक चर के लिए सूचक पारित और फिर उस सूचक के माध्यम से वापस तक पहुँचने के समारोह के भीतर से है कि चर का मान बदलने के लिए है कि में की तरह सच संकेत नहीं है। इसके बजाय, आपको इसे इन दो तरीकों में से एक करना है। ऑब्जेक्ट्स और सरणी संदर्भ द्वारा पारित की जाती हैं ताकि आप फ़ंक्शन से मूल ऑब्जेक्ट में वापस पहुंच सकें।

2

सुनिश्चित नहीं हैं कि वास्तव में इस बात का वास्तविक उपयोग, लेकिन अगर आप थोड़ा पुनर्गठन, तो आप ऐसा कर सकते हैं:

var o = {'val' : 0}; 

var f = function(v) 
{ 
    if(something){ 
     return null; 
    }else{ 
     return v; 
    } 
}; 

o = f(o); 
2

जावास्क्रिप्ट हमेशा "मूल्य से" कार्य तर्क पास करता है। जिसका अर्थ यह है कि कोई फंक्शन बदल नहीं सकता है जो फ़ंक्शन के बाहर चर के बिंदु को इंगित करता है।

हालांकि, जब आप किसी फ़ंक्शन पर किसी ऑब्जेक्ट को पास करते हैं तो "मान" जो पारित होता है वह वस्तु की एक प्रति नहीं, वास्तविक वस्तु का संदर्भ है। तो हालांकि आप बाहरी चर को शून्य या किसी अन्य ऑब्जेक्ट पर सेट नहीं कर सकते हैं, आप उस ऑब्जेक्ट की सामग्री को संशोधित कर सकते हैं। इसका मतलब है आप कुछ इस तरह कर सकते हैं:

var containerObj = {'o' : {'val' : 0} }; 

f = function(v) { 
    v.o = null; 
}; 

f(containerObj.o); // This property would be set to null successfully. 

जाहिर कंटेनर वस्तुओं का एक समूह बनाने सिर्फ ताकि आप उन्हें कार्यों के लिए पारित कर सकते हैं बहुत सुंदर नहीं है, लेकिन यह एक तरह से यह करने के लिए है।

लेकिन मैं जेम्स मोंटगेन के सुझाव के साथ किसी ऑब्जेक्ट या नल को वापस करने और परिणाम को अपने चर पर वापस करने का सुझाव देने की सलाह दूंगा।

1

मैं यहां एक ही समस्या के साथ आया था। हालांकि रैपर उत्तर काम करता है, यह बदसूरत है, और मेरा कार्य असीमित है, इसलिए मैं एक शून्य मान वापस नहीं कर सकता।

कारण मैं o चाहता था null है कि बाद में मैं if (o) //do something, हो सकता है यही वजह है कि ओपी और दूसरों null के रूप में सेट करना चाहते हैं का उपयोग करें।इस तरह, मेरे समाधान के रूप में, हालांकि सटीक प्रश्न का उत्तर नहीं, था

var o = {'val' : 0}; 
f = function(v) { 
    v.isNull = true; 
} 
if (!o.isNull) // do something 
0

शून्य पर

var NULL = null 

यह कर एक वैश्विक चर शून्य कहा जाता है बनाने के लिए हो सकता है और यह तय करेगा का सबसे आसान तरीका फिर आप मूल ऑब्जेक्ट को संशोधित किए बिना मौजूदा चर को NULL पर सेट कर सकते हैं।

var NULL = null; 
var original = {}; 
var ptr = original; 
ptr = NULL; 
console.log("original is not null = " + (original!==null)); 
console.log("ptr is null = " + (ptr===null)); 
संबंधित मुद्दे

 संबंधित मुद्दे