想要初始化函数在使用对象时自动调用

时间:2013-05-28 16:45:05

标签: javascript

我有以下一段代码。在这段代码中,我有一个名为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函数?如果是,那么如何?

2 个答案:

答案 0 :(得分:3)

你需要将所有对象的引用存储在数据结构中,比如字典,基本上每次调用一个函数时,你需要通过字典,看看之前是否使用过该对象,如果没有初始化。
除此之外我没有办法做到这一点,如果没有设置对象中的标志,每个函数都会调用初始化程序。

答案 1 :(得分:0)

这有效,我认为我不建议这样做,为什么不使用class

jsFiddle Example

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