Можно ли вызывать класс как функцию, например, так: `Foo(someVal);`, вместо использования метода или оператора `new`?

Как вызвать класс в JavaScript, передавая параметр без использования метода, при вызове через <code class="javascript">Foo('John');</code> или <code class="javascript">new Foo('John');</code>?
  • 26 августа 2024 г. 7:04
Ответы на вопрос 1
Да, в JavaScript можно вызывать класс как функцию, без использования метода `new`. Для этого необходимо определить класс как функцию, которая внутри себя создает новый экземпляр объекта и возвращает его. Например:

```javascript
function Foo(value) {
    return new Foo.prototype.init(value);
}

Foo.prototype.init = function(value) {
    this.value = value;
}

var obj = Foo('John');
console.log(obj instanceof Foo); // true
console.log(obj.value); // 'John'
```

Таким образом, вызывая `Foo('John')`, мы создаем новый экземпляр объекта класса `Foo` без использования оператора `new`.

Если же требуется передавать параметры при вызове класса через `Foo('John');` без оператора `new`, то можно немного изменить код:

```javascript
function Foo(value) {
    if (this instanceof Foo) {
        this.value = value;
    } else {
        return new Foo(value);
    }
}

var obj = Foo('John');
console.log(obj instanceof Foo); // true
console.log(obj.value); // 'John'
```

Таким образом, при вызове `Foo('John')` без оператора `new`, будет создан новый экземпляр объекта класса `Foo` с переданным параметром.
Похожие вопросы