Можем ли мы изменить значение переменной, хранящейся в другой переменной в javascript

Существует переменная, скажем, var content, которая содержит некоторый контент HTML, и этот HTML также содержит переменную JavaScript, например, ${id}. Теперь я хочу обновить значение переменной ${id}. Я пробовал использовать следующий код, но он не работает.

var id = '';
var content = `<div class="row well margin_btm_ten">
    <div class="col-md-1">
        <b>ID is ${id}</b>  
    </div>`;
row_id = 2;
setTimeout(function(){
    console.log(content)
});
row_id вы никогда не использовали.
Durga 11.04.2018 13:08

Нет, вы не можете просто изменить id и отразить его в content. Вам нужно будет явно пересобрать content при изменении id.

Bergi 11.04.2018 13:09

Это в значительной степени то, для чего нужны функции.

JJJ 11.04.2018 13:10

или используйте функцию замены, например content.replace ("$ {id}", id);

Arjit 11.04.2018 13:11

@Arjit Это синтаксис литерала шаблона. «$ {id}» больше не существует в строке.

JJJ 11.04.2018 13:15

@JJJ будет какая-то ссылка, которую можно использовать для замены

Arjit 11.04.2018 13:20

@Arjit Нет, нет. id - это, в частности, пустая строка в коде OP, поэтому от нее буквально ничего не осталось.

JJJ 11.04.2018 13:29
0
7
54
3

Ответы 3

Это невозможно, поскольку ссылка на «контент» создается с текущим значением переменной id. Переменные JavaScript в основном являются контейнерами для хранения значений данных. Вам нужно будет «перезапустить» переменную content, чтобы получить новый id. Но я думаю, вам лучше использовать функции, чем перезаписывать переменные.

const printName = (name => console.log(`Hello ${name}`));

let name = "Mark";

printName(name);

name = "Peter";

printName(name);

Использование настраиваемого сеттера - хороший пример использования этой функции Javascript.

connexo 11.04.2018 13:44

У вас может быть контент как функция, которая возвращает html-контент, чтобы она вычисляла его каждый раз при вызове. Таким образом, если переменная id изменится, значение, возвращаемое content (), также изменится:

var id = 'one';
var content = () => `<div class="row well margin_btm_ten">
    <div class="col-md-1">
        <b>ID is ${id}</b>  
    </div>`;
console.log(content());
id = 'two';
console.log(content());

Вы можете сделать id функцией с пользовательский сеттер для свойства id, которая будет обновлять content каждый раз, когда вы устанавливаете новый id.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set

function id() {
  var id;
  Object.defineProperty(this, 'id', {
    get() {
      return id;
    },
    set(value) {
      id = value;
      content = `<div class="row well margin_btm_ten">
          <div class="col-md-1">
              <b>ID is ${id}</b>  
          </div>`;
    },
    enumerable: true,
    configurable: true
  });
};

var obj = new id();

var content = `<div class="row well margin_btm_ten">
    <div class="col-md-1">
        <b>ID is ${obj.id}</b>  
    </div>`;

console.log(content) // id: undefined

app.innerHTML += content

obj.id = 2;

console.log(content) // id: 2

app.innerHTML += content

obj.id = 'Hello World!';

console.log(content) // id: 'Hello World'

app.innerHTML += content
<div id="app"></div>

в принципе совсем не плохо. Но ИМХО слишком много инженерии для функции fn, которая должна возвращать текст на основе аргументов.

Cristian S. 11.04.2018 13:52

Другие вопросы по теме