Класс 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
};
}
Ответы
Ответ 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')