2015-12-25 3 views
3
var number = 12345; 

var obj = {}; 

faire quelque chose commeComment obtenir une référence de valeur primitive?

obj.look ((((((some operator or function to get a reference of number)))))  number 

De toute façon, nous allons maintenant penser obj a une référence au numéro. Donc, je voudrais le faire de cette façon.

obj.look = 'abc'; 

console.log (number); // hopefully 'abc' 

je voudrais que ça va être:

  1. pas la méthode (comme obj.look())
  2. mais peut se référer dans la propriété (comme obj.look)

    tous Je demande est comment obtenir une référence de valeur primitive.
    Je crois qu'il doit y avoir un moyen. Sil te plait aide moi.

Répondre

3

Vous pouvez utiliser Object.defineProperty:

var number = 12345; 
 

 
var obj = {}; 
 
Object.defineProperty(obj, 'look', { 
 
    get() { 
 
     return number; 
 
    }, 
 
    set(value) { 
 
     number = value; 
 
    } 
 
}); 
 

 
document.write(obj.look + '<br>'); 
 
obj.look = 'abc'; 
 
document.write(number);

+0

Comment cela résout-il la 2ème partie de la question (qui n'a aucun sens): 'obj.look = 'abc'; console.log (numéro); // J'espère 'abc'? – Andy

+1

Peut être fait avec un setter aussi bien. – MinusFour

+0

Merci beaucoup. Maintenant, je peux aller dormir bien et comme @MinusFour mentionné, var obj = {get look() {return number;}}; travaillera aussi. –

1

Vous pouvez avoir un objet, copiez cette référence à une autre variable, muter l'objet et puisque les deux variables contiennent une référence à la même objet tout changement effectué à partir d'une variable sera également accessible à partir de l'autre variable.

Les valeurs primitives peuvent être enveloppées dans des objets (new Object) mais elles ne peuvent pas être référencées autrement. Les objets String sont immuables (toutes les propriétés sont non configurables, non modifiables) et les valeurs Number ne sont pas non plus accessibles. Vous ne pouvez donc pas changer la valeur de l'un ou l'autre objet.

Cela signifie que lorsque vous faites:

obj.look = 'abc'; 

Vous essuyer l'ancienne référence et la mise en place d'une nouvelle chaîne, il (objet ou primitive). number conservera l'ancienne référence et restera inchangée.

Donc, non. Je ne pense pas que ce soit possible en Javascript.