2013-06-29 6 views
23

मैंने पहले सी ++ का उपयोग किया और मुझे एहसास हुआ कि पॉइंटर्स बहुत उपयोगी थे। क्या जावास्क्रिप्ट में कुछ भी है जो सूचक की तरह कार्य करता है? जावास्क्रिप्ट पॉइंटर्स है? मैं संकेत का उपयोग करने जब मैं की तरह कुछ का उपयोग करना चाहते चाहते:क्या जावास्क्रिप्ट में पॉइंटर्स हैं?

var a = 1; 
var b = "a"; 
document.getElementById(/* value pointed by b */).innerHTML="Pointers"; 

मुझे पता है कि यह एक बहुत ही सरल उदाहरण है और मैं बस a इस्तेमाल कर सकते हैं, लेकिन वहाँ कई और अधिक जटिल उदाहरण हैं, जहां मैं संकेत बहुत उपयोगी पाते हैं कर रहे हैं । कोई विचार?

+3

एमएमएच ... आपको आम तौर पर पॉइंटर्स की आवश्यकता नहीं होनी चाहिए। क्या आप ऐसे मामले का एक और वास्तविक दुनिया उदाहरण दे सकते हैं जहां आप सामना करते हैं जहां पॉइंटर्स सहायक होंगे? – Ryan

+0

[जावास्क्रिप्ट में पॉइंटर्स?] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/10231868/pointers-in-javascript) –

उत्तर

42

नहीं, जेएस में पॉइंटर्स नहीं हैं।

ऑब्जेक्ट संदर्भ की प्रतिलिपि पारित करके पास किए जाते हैं। प्रोग्रामर ऑब्जेक्ट के पते का प्रतिनिधित्व करने वाले किसी भी सी-जैसे "मान" तक नहीं पहुंच सकता है।

एक समारोह एक के भीतर है कि संदर्भ के माध्यम से सामग्री एक पारित कर वस्तु की बदल सकते हैं, लेकिन आप संदर्भ है कि फोन करने वाले, था, क्योंकि आपका संदर्भ केवल एक प्रति है संशोधित नहीं कर सकते:

var foo = {'bar': 1}; 

function tryToMungeReference(obj) { 
    obj = {'bar': 2}; // won't change caller's object 
} 

function mungeContents(obj) { 
    obj.bar = 2;  // changes _contents_ of caller's object 
} 

tryToMungeReference(foo); 
foo.bar === 1; // true - foo still references original object 

mungeContents(foo); 
foo.bar === 2; // true - object referenced by foo has been modified 
+1

संदर्भ_ की _copy क्या है, इसे पॉइंटर्स की तरह उपयोग किया जा सकता है और मैं इसका उपयोग कैसे करूं ? –

+0

@ user2297366 – Alnitak

+1

का उत्तर देने के लिए अद्यतन देखें संदर्भ का नाम है, प्रतिलिपि मूल रूप से एक ही नाम पर इंगित करने वाला एक नया नाम है – Mataniko

15

आप शर्त जावास्क्रिप्ट में पॉइंटर्स हैं; वस्तुएं पॉइंटर्स हैं।

//this will make object1 point to the memory location that object2 is pointing at 
object1 = object2; 

//this will make object2 point to the memory location that object1 is pointing at 
function myfunc(object2){} 
myfunc(object1); 

यदि स्मृति स्थान अब इंगित नहीं किया गया है, तो डेटा खो जाएगा।

विपरीत सी में, आप सूचक की वास्तविक पता है और न ही सूचक के वास्तविक मूल्य नहीं देख सकते हैं, आप कर सकते हैं केवल भिन्नता यह (पता यह की ओर इशारा पर मूल्य मिलता है।)

0

तकनीकी तौर पर जे एस संकेत नहीं है, लेकिन मैं उनके व्यवहार की नकल करने के तरीके की खोज;)

var car = { 
    make: 'Tesla', 
    nav: { 
     lat: undefined, 
     lng: undefined 
    } 
}; 

var coords: { 
    center: { 
     get lat() { return car.nav.lat; }, // pointer LOL 
     get lng() { return car.nav.lng; } // pointer LOL 
    } 
}; 

car.nav.lat = 555; 
car.nav.lng = 777; 

console.log('*** coords: ', coords.center.lat); // 555 
console.log('*** coords: ', coords.center.lng); // 777 
+3

आप बस 'कार' के गुणों को वापस कर दें। इसमें पॉइंटर्स या नकल करने के साथ कुछ लेना देना नहीं है और इसे 'स्कोप' के रूप में जाना जाता है –

1

इस प्रयास करें:

//MaybePointer Lib 
 
function MaybePointer(v){ 
 
    this.val = v; 
 
} 
 
MaybePointer.prototype.valueOf = function(){ return this.val }; 
 

 
//Your code 
 
var a = new MaybePointer(1); 
 
var b = a; 
 
document.getElementById(b+'').innerHTML="Pointers 1"; 
 

 
var c = new MaybePointer(2); 
 
var b = c; 
 
document.getElementById(b+'').innerHTML="Pointers 2";
<div id="1"></div> 
 
<div id="2"></div>

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