我有一个类似于下面的类。创建对象时如何调用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
};
}
答案 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类提供了更简单,更清晰的语法来创建对象和处理继承。
使用此语法时,因为在实例化时只运行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
}
}
constructor()
&#13;