2013-06-29 22 views
23

Użyłem C++ wcześniej i zdałem sobie sprawę, że wskaźniki były bardzo pomocne. Czy jest coś w javascript, który działa jak wskaźnik? Czy javascript ma wskaźniki? Lubię używać wskaźników, gdy chcę użyć coś takiego:Czy są wskaźniki w javascript?

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

wiem, że jest to bardzo prosty przykład, a może po prostu użyć a, ale istnieje kilka bardziej skomplikowanych przykładów, gdzie znajdę wskazówki bardzo przydatna . Jakieś pomysły?

+3

Mmh ... nie powinieneś generalnie potrzebować wskazówek. Czy możesz podać bardziej rzeczywisty przykład przypadku, w którym napotkasz wskazówki pomocne? – Ryan

+0

Możliwy duplikat [Wskaźniki w JavaScript?] (Http://stackoverflow.com/questions/10231868/pointers-in-javascript) –

Odpowiedz

42

Nie, JS nie ma wskaźników.

Obiekty są przekazywane za pomocą kopii odniesienia. Programista nie ma dostępu do "wartości" podobnej do C, reprezentującej adres obiektu.

W przypadku funkcji jednej może zmienić zawartość danego przeszedł obiektu za pośrednictwem tego odniesienia, ale nie można modyfikować odniesienie że rozmówca miał, ponieważ odniesienia jest tylko kopia:

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

Co to jest _kopia odwołania_, czy można go używać jak wskaźników i jak go używać ? –

+0

@ user2297366 zobacz aktualizację, aby odpowiedzieć – Alnitak

+1

Odniesieniem jest nazwa obiektu, kopia jest w zasadzie nową nazwą wskazującą na ten sam adres – Mataniko

15

Stawiasz są wskaźniki w JavaScript; obiekty są wskaźnikami.

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

Jeśli lokalizacja pamięci nie jest już wskazywana, dane tam zostaną utracone.

W przeciwieństwie do C, nie można zobaczyć rzeczywisty adres wskaźnika ani rzeczywistą wartość wskaźnika, można to tylko dereference (uzyskać wartość pod adresem to wskazuje).

0

Technicznie JS nie ma wskazówek, ale odkryłem sposób naśladować ich zachowanie;)

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

Po prostu zwracasz właściwości "samochodu". Nie ma to nic wspólnego ze wskaźnikami lub naśladownictwem i jest znane jako "zakres" –

1

Spróbuj tego:

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

Powiązane problemy