1

Есть объект с кучей вложенностей. Как грамотно передать контекст объекта canvas, чтобы можно было изменить название объекта и все работало исправно

let canvas = {
  circle: {
    func: function(){
        console.log(1);
    }
  },
  physics: {
    func: function(){
      // Хочу как-то передать контекст canvas, чтобы если название
      // Объекта изменится, код не поехал
      canvas.circle.func();
      // this.circle.func(); // Не работает
    }
  }
}
canvas.physics.func();
Igor
  • 1,211

1 Answers1

1

function createCanvas(aValue) {
  let result = {
    value: aValue,  
    circle: {
      func: function() {
        console.log(this.canvas.value);
      }
    },
    physics: {
      func: function() {
        this.canvas.circle.func(); // работает
      }
    }
  };
  result.circle.canvas = result;
  result.physics.canvas = result;

return result; }

let shmanvas = createCanvas(5); let anvas = createCanvas(123);

anvas.physics.func(); shmanvas.physics.func();

  • Как это работает? Не могу понять, подходит ли в моем случае. Я упростил пример, видимо зря – Igor Nov 17 '17 at 20:58
  • @Igor Это работает очень хорошо :). Здесь используется функция-фабрика, которая перед возвращением созданного родительского объекта присваивает ссылку на него всем подобъектам. –  Nov 17 '17 at 21:10