JavaScript class - Call method when object initialized

前端 未结 5 1294
时光取名叫无心
时光取名叫无心 2021-02-02 09:56

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

相关标签:
5条回答
  • 2021-02-02 10:26

    Just add

    this.init();
    

    to your myClass function.

    0 讨论(0)
  • 2021-02-02 10:29

    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')

    0 讨论(0)
  • 2021-02-02 10:33

    There is even more smooth way to do this:

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

    This will both create method and call it.

    0 讨论(0)
  • 2021-02-02 10:42

    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();
    }
    
    0 讨论(0)
  • 2021-02-02 10:46

    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.

    0 讨论(0)
提交回复
热议问题