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

var obj = {}; 

сделать что-то вродеКак получить ссылку на примитивное значение?

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

в любом случае, давайте думаю, что теперь OBJ имеет ссылку на номер.
, поэтому я хотел бы сделать это таким образом.

obj.look = 'abc'; 

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

я хотел бы это будет:

  1. не метод (как obj.look())
  2. но может ссылаться на свойства (как obj.look)

    все Я спрашиваю, как получить ссылку на примитивное значение.
    Я считаю, что должен быть какой-то способ. пожалуйста, помогите мне.

ответ

3

Вы можете использовать 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

Как это решить вторую часть вопроса (что не имеет смысла imo): 'obj.look = 'abc'; console.log (число); // надеюсь, что «abc''? – Andy

+1

Может быть сделано с помощью сеттера. – MinusFour

+0

Большое вам спасибо. Теперь я могу хорошо спать. И как упоминалось @MinusFour, var obj = {get look() {return number;}}; также будет работать. –

1

Вы можете иметь объект, скопируйте эту ссылку на другую переменную, мутировать объект и поскольку обе переменные содержат ссылку на проект тот же объект любые изменения, сделанные из одной переменной, также будут доступны из другой переменной.

Примитивные значения могут быть обернуты в объекты (new Object), но на них нельзя ссылаться иначе. Строковые объекты неизменяемы (все свойства не настраиваются, не записываются), а значения объектов Number также недоступны. Таким образом, вы не можете изменить значение какого-либо объекта.

Это означает, что когда вы делаете:

obj.look = 'abc'; 

Вы вытираете старую ссылку и создание новой строки есть (объект или примитива). number по-прежнему будет хранить старую ссылку и останется неизменной.

Итак, нет. Я не думаю, что это можно сделать в Javascript.

 Смежные вопросы

  • Нет связанных вопросов^_^