JS - свойство объекта с присвоенным значением становится неопределенным - PullRequest
0 голосов
/ 19 марта 2020

Я пытаюсь запустить этот код в js

    function platform() {
       platform.list.push(this);
       //some more code
    }
    platform.lf = false;

, и у меня есть все экземпляры платформ, хранящиеся на platform.list. Но когда я пытаюсь это сделать:

    console.log(platform.list[0].lf);

Я получаю неопределенный ответ? Любая помощь? (У меня есть один экземпляр объекта платформы)

Ответы [ 2 ]

0 голосов
/ 19 марта 2020

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

function Platform(){
  const a = ['lame', 1, 'test']; // private array
  this.lf = true;
  this.testFunc = ()=>{
    // no arguments array in an arrow function
    console.log(a);
    return this; // for property chaining
  }
}
function Platforms(){
  this.list = [];
  this.addPlatform = function(){
    this.list.push(...arguments);
    return this;
  }
}
const pf = new Platforms, np = new Platform;
np.lf = false;
pf.addPlatform(new Platform, new Platform, np);
pf.list[0].lf = false;
console.log(pf.list); np.testFunc();

Вам также может понравиться этот дизайн:

function Platform(){
  this.lf = true;
}
function Platforms(){
  this.list = [];
  this.addPlatform = function(){
    this.list.push(new Platform);
    return this;
  }
}
const pf = new Platforms;
pf.addPlatform().addPlatform().addPlatform();
pf.list[0].lf = false;
console.log(pf.list);
0 голосов
/ 19 марта 2020

Это то, что вы пытаетесь сделать? Как получается, что он работает нормально с фрагментом кода? Вы забыли инициализировать lf (this.lf = ...) внутри своей части "// немного кода", которую вы не опубликовали?

Просто примечание - platfrom.lf и Если принадлежащие экземплярам класса, к которым вы пытаетесь получить доступ, это совершенно разные вещи.

test.list = []

function test()
{
  test.list.push(this);
  this.x = Math.random();
}

a = new test();
b = new test();

console.log(test.list.length);
console.log(test.list[0].x);
console.log(test.list[1].x);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...