2013-06-29 19 views
23

Ich benutzte C++ vorher und ich erkannte, dass Zeiger sehr hilfreich waren. Gibt es etwas in Javascript, das sich wie ein Zeiger verhält? Hat Javascript Zeiger? Ich mag Zeiger verwenden, wenn ich wie etwas verwenden mag:Gibt es Zeiger in Javascript?

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

Ich weiß, dass dies ein sehr einfaches Beispiel ist, und ich konnte a nur verwenden, aber es gibt einige komplexere Beispiele, wo ich finden würde Zeiger sehr nützlich . Irgendwelche Ideen?

+3

Mmh ... Sie sollten in der Regel keine Zeiger benötigen. Können Sie ein realistischeres Beispiel für einen Fall geben, in dem Ihnen Hinweise hilfreich gewesen wären? – Ryan

+0

Mögliches Duplikat von [Zeiger in JavaScript?] (Http://stackoverflow.com/questions/10231868/pointers-in-javascript) –

Antwort

42

Nein, JS hat keine Zeiger.

Objekte werden weitergegeben, indem eine Kopie einer Referenz übergeben wird. Der Programmierer kann auf keinen C-ähnlichen "Wert" zugreifen, der die Adresse des Objekts darstellt.

Innerhalb einer Funktion kann man über diese Referenz die Inhalt eines übergebene Objekt ändern, aber die Referenz nicht ändern können, dass der Anrufer hatte, weil Ihre Referenz nur eine Kopie ist:

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

Was ist eine _kopie einer Referenz_, kann es wie Zeiger verwendet werden und wie verwende ich es ? –

+0

@ user2297366 siehe Update zu beantworten – Alnitak

+1

Referenz ist der Name des Objekts, Kopie ist im Grunde ein neuer Name, der auf die gleiche Adresse zeigt – Mataniko

15

Sie wetten es gibt Zeiger in JavaScript; Objekte sind Zeiger.

//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); 

Wenn auf einen Speicherort nicht mehr hingewiesen wird, gehen die Daten dort verloren.

Anders als in C, können Sie nicht die tatsächliche Adresse des Zeigers sehen noch den tatsächlichen Wert des Zeigers, können Sie nur dereferenzieren (erhalten den Wert an der Adresse verweist er auf.)

0

Technisch JS keine Zeiger, aber ich entdeckte einen Weg, um ihr Verhalten zu imitieren;)

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

Sie geben nur die Eigenschaften des 'Autos' zurück. Es hat nichts mit Zeigern oder Nachahmen zu tun und wird als "Scope" bezeichnet –

1

Versuchen Sie folgendes:

//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>

Verwandte Themen