Получить массив другим методом в том же классе в javascript - PullRequest
0 голосов
/ 05 марта 2020

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

Javascript:

class SomeClass {
   method1() {
      var array = new array();
      //its actually a 2d array and it is being initialised here but for simplicity this isn't 
      //necessary in the example.
   }

   method2() {
   // --> Here i want to access the array and it's contents.

   //I have tried this:
   this.array;
   //and 
   array;
   }
}

, но я получил "не готово свойство неопределенный ", когда я попробовал this.array;

Ответы [ 3 ]

3 голосов
/ 05 марта 2020

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

В этой ссылке вы можете увидеть больше информации .

Вот пример:

class SomeClass {
  constructor(someValue) {
    // Initialize array or any other atribute
    this.arr = new Array(someValue);
  }
  
   method1() {
      console.log(this.arr);
   }

   method2() {
     console.log(this.arr);
   }
}

var instance = new SomeClass('data');
instance.method1();
instance.method2();
1 голос
/ 05 марта 2020

Хорошо, так что вы делаете большую ошибку, Ваши концепции OOP поставлены на карту. Чтобы получить доступ к массиву как свойству / экземпляру класса, вам необходимо объявить его конструктор внутри класса. Примерно так

  class SomeClass {
     constructor(){
         this.array = new Array();
     }
     yourMethod1(){
        console.log(this.array); /// You cann access it here and manipulate
     }
     yourMethod2(){
        console.log(this.array); // You can accesss here too and do the same
    }
 }

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

  let a = new SomeClass();
  a.yourMethod1();
  a.yourMethod2();
1 голос
/ 05 марта 2020

Массив, объявленный в method1, будет доступен только в этой функции. Нет доступа к локальным переменным функции в какой-либо другой функции.

Решением может быть использование массива в качестве свойства экземпляра класса

class SomeClass {
   constructor(){
    this.array = []
   }
   method1() {
      console.log(this.array);
   }
   method2() {
      console.log(this.array)
   }
}

const obj = new SomeClass();
obj.method1();
obj.method2();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...