JavaScript类 - 初始化对象时的调用方法

时间:2010-08-19 22:53:47

标签: javascript object

我有一个类似于下面的类。创建对象时如何调用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
    };
}

5 个答案:

答案 0 :(得分:31)

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函数。

答案 1 :(得分:8)

有更平稳的方法可以做到这一点:

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

这将创建方法并调用它。

答案 2 :(得分: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();
}

答案 3 :(得分:1)

添加

this.init();

到你的myClass函数。

答案 4 :(得分:1)

  

ECMAScript 2015中引入的JavaScript类主要是基于JavaScript的现有基于原型的继承的语法糖。类语法没有向JavaScript引入新的面向对象的继承模型。 JavaScript类提供了更简单,更清晰的语法来创建对象和处理继承。

     

- MDN web docs

使用此语法时,因为在实例化时只运行return (dispatch, getState) => { }方法,所以无法自动实例化对象。您必须添加function todoApp(state = initialState, action) { switch (action.type) { case SET_VISIBILITY_FILTER: return Object.assign({}, state, { visibilityFilter: action.filter }) default: return state } }

&#13;
&#13;
constructor()
&#13;
&#13;
&#13;