JavaScript Определите свойство в терминах метода - PullRequest
0 голосов
/ 20 февраля 2020

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

Кроме того, Как ключевое слово "this" в Javascript действует внутри литерала объекта? является слишком высокоуровневым расшифровкой предмета для меня, чтобы я мог решить мой вариант использования.

In Python, я могу сделать это:

class Test:
    def __init__(self):
        self.id = self.get_id()

    def get_id(self):
        return 10

t = Test()
print(t.id)

Значение свойства объекта может быть определено в терминах метода того же объекта.

В JavaScript оно не работает :

var Test = {
  id : this.getId(),
  getId : function() {
    return 10;
  }
};

Дает script.js:47 Uncaught TypeError: this.getId is not a function

Я пытался определить id после определения метода, но это не сработало.

Как мне это сделать это в JavaScript пожалуйста?

Ответы [ 3 ]

3 голосов
/ 20 февраля 2020

Другой ответ (Евгений Юдин) проще - но это альтернатива, использующая классы, которые могут добавить что-то к вашему пониманию.

class Test {
  constructor() {
    this.id = this.getId();
  }
  getId() {
    return 10;
  }
}

console.log((new Test()).id); //outputs 10
2 голосов
/ 20 февраля 2020

var Test = {
  get id() {
    return 10
  }
}

console.log(Test.id)

https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Functions/get

или

var Test = {
  get id () {
    return this.getId()
  },
  getId: function () {
    return 10
  }
}

console.log(Test.id)
0 голосов
/ 20 февраля 2020

Вы можете использовать this только внутри метода. Нет ссылки на текущий объект в литерале объекта.

Но вы можете ссылаться на него после создания объекта.

var Test = {
  getId : function() {
    return 10;
  }
};
Test.id = Test.getId()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...