I have a class similar to the one below. How do I call my init
method when the object is created? I don\'t want to have to create an instance of my object then call
Just add
this.init();
to your myClass function.
JavaScript classes introduced in ECMAScript 2015 are primarily syntactical sugar over JavaScript's existing prototype-based inheritance. The class syntax is not introducing a new object-oriented inheritance model to JavaScript. JavaScript classes provide a much simpler and clearer syntax to create objects and deal with inheritance.
- MDN web docs
When using this syntax, because only the constructor()
method is run on instantiation you can't auto-instantiate an object. You always have to add 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')
There is even more smooth way to do this:
this.init = function(){
// method body
}();
This will both create method and call it.
See below for one possible answer, and some corrections to your code.
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();
}
NB. Constructor function names should start with a capital letter to distinguish them from ordinary functions, e.g. MyClass
instead of myClass
.
Either you can call init
from your constructor function:
var myObj = new MyClass(2, true);
function MyClass(v1, v2)
{
// ...
// pub methods
this.init = function() {
// do some stuff
};
// ...
this.init(); // <------------ added this
}
Or more simply you could just copy the body of the init
function to the end of the constructor function. No need to actually have an init
function at all if it's only called once.