2010-08-19 198 views
14

我有一个类似于下面的类。创建对象时,如何调用我的init方法?我不想创建我的对象的实例,然后像我在下面调用初始化。JavaScript类 - 对象初始化时的调用方法

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

没有解决方案的工作,如果要使用被实际的定义原型和原型代码恰好是低于这个构造函数的性质。 – 2015-07-30 02:06:32

回答

30

注意:构造函数函数名称应以大写字母开头,以区别于普通函数,例如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

谢谢。我实际上试着调用'this.init();'发布之前,但我在函数声明之前进行调用,这就是为什么它不起作用。 =] – 2010-08-19 23:10:10

+0

如果我简单地用'var obj = {init:function(){...}}'定义我的对象,我该怎么做?我应该怎么称呼它? – Eugene 2011-05-27 11:12:08

+0

@Eugene - 出错了:'var makeObj = function(x,y){return {a:x + y}; }'这是一个函数,可以在返回之前创建一个对象并执行所需的任何一次初始化。有时称为工厂功能。 – 2011-05-27 13:51:08

1

只需添加

this.init(); 

您myClass的功能。

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(); 
} 
+0

谢谢,这是一个错误,当我真正的类转换为一个简单的例子的问题。 – 2010-08-19 23:11:52

5

甚至有更顺畅的方式来做到这一点:

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

这都将创建方法,并调用它。

1

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

- MDN web docs

当使用这种语法,因为只有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')