我有以下一段代码。在这段代码中,我有一个名为func
的类。在func
内,我有3个函数,即init, func1 and func2
。然后我在return object literal
之前调用init函数。那么当我使用var f = new func()
创建此类的新实例时,它会自动调用init
函数,因此我没有手动调用它。因此,当创建一个新的类实例时,它就像其他面向对象语言中的构造函数一样,然后构造函数会自动被调用。
这是代码
var func = function () {
var a, b,
init = function () {
a = 1;
b = 2;
},
func1 = function () {
},
func2 = function () {
};
init();
return {
func1: func1,
func2: func2
};
};
var f = new func();
现在我想在下面的场景中做与上面完全相同的事情。那就是每当我调用init
对象中的任何函数时,我都希望自动调用func
函数。
var func = {
init: function () {
},
func1: function () {
},
func2: function () {
}
}
func.func1();
在上面的场景中调用func对象中的任何函数时,是否可以自动调用init函数?如果是,那么如何?
答案 0 :(得分:3)
你需要将所有对象的引用存储在数据结构中,比如字典,基本上每次调用一个函数时,你需要通过字典,看看之前是否使用过该对象,如果没有初始化。
除此之外我没有办法做到这一点,如果没有设置对象中的标志,每个函数都会调用初始化程序。
答案 1 :(得分:0)
这有效,我认为我不建议这样做,为什么不使用class
?
var func = {
a:0,
b:0,
init: function () {
this.a = 1;
this.b = 2;
console.log('init');
},
func1: function () {
console.log('func1');
this.init();
console.log(this.a);
console.log(this.b)
},
func2: function () {
console.log('func2');
this.init();
console.log(this.a);
console.log(this.b)
}
}
func.func1();
console.log("func1>" + func.a);
console.log("func1>" + func.b);
func.a = 0;
func.b = 0;
func.func2();
console.log("func2>" + func.a);
console.log("func2>" + func.b);