Y a-t-il des pointeurs en javascript?

J'ai utilisé C++ avant et j'ai réalisé que les pointeurs étaient très utiles. Est-il rien en javascript, qui agit comme un pointeur? N'javascript ont pointeurs? J'aime utiliser des pointeurs quand je veux utiliser quelque chose comme:

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

Je sais que c'est un exemple extrêmement simple et je pourrais simplement utiliser a, mais il y a plusieurs exemples plus complexes où je trouverais des pointeurs très utiles. Des idées?

27
demandé sur Dylan Vander Berg 2013-06-29 20:40:24

4 réponses

Non, JS n'a pas de pointeurs.

Les objets sont passés en passant une copie d'une référence . Le programmeur ne peut accéder à aucune "valeur" de type C représentant l'adresse d'un objet.

Dans une fonction, on peut changer le Contenu d'un objet passé via cette référence, mais vous ne pouvez pas modifier la référence que l'appelant avait car votre référence n'est qu'une copie:

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
49
répondu Alnitak 2018-06-10 21:42:05

Vous pariez qu'il y a des pointeurs en JavaScript; les objets sont des pointeurs.

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

Si un emplacement de mémoire n'est plus pointé vers, les données y seront perdues.

Contrairement à C, vous ne pouvez pas voir l'adresse réelle du pointeur ni la valeur réelle du pointeur, vous ne pouvez que le déréférencer (obtenir la valeur à l'adresse vers laquelle il pointe.)

20
répondu user3015682 2015-05-15 14:26:24

Essayez ceci:

//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>
-1
répondu ailton.b.s.j 2017-11-15 03:55:48

Techniquement js n'a pas de pointeurs, mais j'ai découvert un moyen d'imiter leur comportement ;)

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
répondu Sam Araiza 2016-05-27 19:19:33