Используйте переменные объекта перед его созданием - PullRequest
0 голосов
/ 30 сентября 2018

Я хочу создать «указатель» на переменную объекта перед тем, как создать его так:

anotherFunc();

function anotherFunc()
{
  let obj3 = { param1 : obj1.hp , param2 : obj2.hp };

  myFunction(obj3);
}

function myFunction(parameters)
{
  let obj1 = {
    hp: 100
  };

  let obj2 = {
    hp: 50
  };

  console.log(parameters);
  thirdFunc(parameters);
}

function thirdFunc({param1, param2}={})
{
  console.log(param1);
}

Если я, конечно, запускаю этот код, я получаю ошибку, потому что obj1 и obj2 в этот момент не существуют.Но я хочу иметь возможность сказать программе: «эй, пока эти переменные и объекты не существуют, но когда я говорю вам, вам нужно искать их в закрытии и получать их значения».Возможно ли вообще иметь такую ​​функциональность в js?

// EDIT

Извините, похоже, я действительно задал неуместный вопрос.Невозможно делать то, что я хочу.

Ответы [ 2 ]

0 голосов
/ 30 сентября 2018

Во время выполнения ваш obj1 еще не объявляется, когда вы звоните своему anotherFunc и что вы прибываете на эту линию let obj3 = { param1 : obj1.hp , param2 : obj2.hp };.Вы не можете получить доступ к переменной, которая не объявлена, или вы получите variableName is not defined.В вашем случае каждая переменная доступна только в своей области (функции).

Я не знаю, чего вы пытаетесь достичь, но может быть что-то вроде этого:

function anotherFunc() {
  let obj3 = { param1 : null , param2 : null };

  myFunction(obj3);
}

function myFunction(obj) {
  obj.param1 = 100;
  obj.param2 = 50;

  console.log(obj);
  thirdFunc(obj);
}

function thirdFunc({param1, param2} = {}) {
  console.log(param1);
}

anotherFunc();

Если вам нужно что-то еще, не могли бы вы описать больше, что вы хотите?

0 голосов
/ 30 сентября 2018

Это не работает в указанном порядке.

Вы можете привязать объект к функции и принять this в качестве ссылки на результат.Function#bind возвращает новую функцию, которая должна быть вызвана для результата.

function getObject() {
   return { param1: this.obj1.hp, param2: this.obj2.hp };
}

function bindObject() {
    let obj1 = { hp: 100 };
    let obj2 = { hp: 50  };

    return getObject.bind({ obj1, obj2 });      
}

console.log(bindObject()());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...