Ссылка на класс внутри статического метода без использования его имени - PullRequest
0 голосов
/ 11 декабря 2018

Как я могу ссылаться на класс из статического метода, не используя само имя класса в JavaScript (аналогично PHP self и self::method_name)?

Например, как в приведенном ниже классе какмогу ли я сослаться на метод foo и метод bar внутри foobar метода без использования FooBar.methodName?

class FooBar {
    static foo() {
        return 'foo';
    }

    static bar() {
        return 'bar';
    }

    static foobar() {
        return FooBar.foo() + FooBar.bar(); 
        // self::foo() + self::bar() would have been more desirable.
    }
}

Ответы [ 3 ]

0 голосов
/ 11 декабря 2018

Если все эти методы являются статическими, вы можете использовать this.

class FooBar {
    static foo() {
        return 'foo';
    }

    static bar() {
        return 'bar';
    }

    static foobar() {
        return this.foo() + this.bar();
    }
}
0 голосов
/ 11 декабря 2018

Да: синтаксис, о котором вы спрашиваете, «this».

Из MDN:

https://medium.com/@yyang0903/static-objects-static-methods-in-es6-1c026dbb8bb1

Как описывает MDN: «Статические методы вызываются без создания экземпляра своего класса и также не могут быть вызваны при создании экземпляра класса.Статические методы часто используются для создания служебных функций для приложения ». Другими словами, статические методы не имеют доступа к данным, хранящимся в определенных объектах....

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

Также обратите внимание:

Существует два способа вызова статических методов:

Foo.methodName() 
// calling it explicitly on the Class name
// this would give you the actual static value. 

this.constructor.methodName()
// calling it on the constructor property of the class
// this might change since it refers to the class of the current instance, where the static property could be overridden
0 голосов
/ 11 декабря 2018

Вы можете использовать ключевое слово this для ссылки на сам объект.

См. Пример ниже:

class FooBar {
  static foo() {
    return 'foo';
  }

  static bar() {
    return 'bar';
  }

  static foobar() {
    return this.foo() + this.bar();
    // self::foo() + self::bar() would have been more desirable.
  }
}

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