如何调用函数内部函数?

时间:2012-12-03 11:50:45

标签: javascript jquery

var abc = {
    'a': 10,
    'b': 10,
    c: function() {
        //like if I have many many functions in c
        init_a();
        multiple();

        function init_a() {
            abc.a = 30;
        }

        function multiple() {
            alert(abc.a * abc.b);
        }

        function minus() {
            alert(abc.a - abc.b);
        }
        return {
            function myalert() {
                var result = abc.a + abc.b;
                alert(result);
            }
        }
    },
    d: function() {
        abc.c.myalert(); // ???  error??
        abc.c().myalert(); // ??? error??  **it run all functions in c but not just myalert, strange things happening...
    }

}
abc.d();

在函数d?

中调用'myalert()'函数的语法是否正确?

3 个答案:

答案 0 :(得分:6)

myalert()函数 abc.c()的本地函数,所以这是不可能的。

您可以让c()返回myalert()

c: function() {
    return function myalert() {
      // whatever
    }
}, d: function() {
    this.c()()
}

请注意,不必命名返回的函数,即return function() { .. }

<强>更新

如果你想像this.c().myalert()那样调用它,那么c()需要直接返回一个对象而不是函数:

c: function() {
    return {
        myalert: function() { ... }
    }
}

更新2

c()声明外,您的myalert()函数现在还包含其他语句。调用时,init_a()multiple()会在返回之前被调用。

我建议您重构代码,例如,将myalert()移到主对象中:

var abc = {
    a: 10,
    b: 10,
    c: function() { ... }
    myalert: function() { ... }
    d: function() {
        this.myalert();
    }
}

答案 1 :(得分:2)

您可以从c返回包含myalert的对象:

var abc = {
    'c': function() {
        return {
            myalert: function() {
                alert('foo');
            }
        };
    },
    'd': function(){
        abc.c().myalert(); // foo
    }
};
abc.d();​

演示:http://jsfiddle.net/g2KEK/

答案 2 :(得分:0)

c: function() {
    return {
        myalert : function() {
            // whatever
        }
    }
}, d: function() {
    this.c().myalert()
}