Класс JavaScript - вызов метода при инициализации объекта - PullRequest
19 голосов
/ 20 августа 2010

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

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
    };
}

Ответы [ 5 ]

31 голосов
/ 20 августа 2010

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, если она вызывается только один раз.

8 голосов
/ 26 июня 2016

Есть еще более плавный способ сделать это:

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

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

3 голосов
/ 20 августа 2010

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

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();
}
1 голос
/ 06 августа 2017

Классы 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')
1 голос
/ 20 августа 2010

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

this.init();

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...