Подтвердить что ты не робот

Класс JavaScript - метод вызова при инициализации объекта

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

var myObj = new myClass(2, true);
myObj.init();

function myClass(v1, v2) 
{
    // public vars
    this.var1 = v1;

    // private vars
    var2 = v2;

    // pub methods
    this.init = function() {
        // do some stuff        
    };

    // private methods
    someMethod = function() {
        // do some private stuff
    };
}
4b9b3361

Ответ 1

NB. Названия функций конструктора должны начинаться с заглавной буквы, чтобы отличать их от обычных функций, например. MyClass вместо MyClass.

Вы можете вызвать init из функции конструктора:

var myObj = new MyClass(2, true);

function MyClass(v1, v2) 
{
    // ...

    // pub methods
    this.init = function() {
        // do some stuff        
    };

    // ...

    this.init(); // <------------ added this
}

Или, проще говоря, вы можете просто скопировать тело функции init в конец функции конструктора. Нет необходимости вообще иметь функцию init вообще, если она только вызывается один раз.

Ответ 2

Существует еще более гладкий способ сделать это:

this.init = function(){
  // method body
}();

Это создаст метод и вызовет его.

Ответ 3

См. ниже один возможный ответ и некоторые исправления для вашего кода.

function myClass(v1, v2) 
{
    // public vars
    this.var1 = v1;

    // private vars
    // use var to actually make this private
    var var2 = v2;

    // pub methods
    this.init = function() {
        // do some stuff        
    };

    // private methods
    // this will be private as though it had been declared with var
    function someMethod() {
        // do some private stuff
    };

    //call init
    this.init();
}

Ответ 4

Просто добавьте

this.init();

для вашей функции myClass.

Ответ 5

Классы JavaScript, представленные в ECMAScript 2015, в основном представляют собой синтаксический сахар над существующим на основе прототипов JavaScript. Синтаксис класса не представляет для JavaScript новую объектно-ориентированную модель наследования. Классы JavaScript обеспечивают гораздо более простой и понятный синтаксис для создания объектов и обработки наследования.

- веб-документы MDN

При использовании этого синтаксиса, поскольку при создании экземпляра запускается только метод constructor(), вы не можете автоматически создать объект. Вам всегда нужно добавить user = new MyUser()

var user;

class MyUser {
  constructor(var1, var2) {

    this.var1 = var1;
    this.var2 = var2;

  }

  static staticMethod() {

    // accessed directly with the class name `MyUser`

  }

  instanceMethod() {

    // accessed with object instance
return true
  }

}

user = new MyUser('hey','there')