javascript - 如何在函数内部调用函数?

标签 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()”函数的正确语法是什么?

最佳答案

myalert() 函数 isabc.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

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

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

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

关于javascript - 如何在函数内部调用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13682663/

相关文章:

Jquery 删除类、添加类

jquery - 将所有表 td 值放入数组中

javascript - 当对象具有 "Expected identifier"作为属性名称时,来自 IE8 和 IE7 的 "new"错误

javascript - 如何通过jsp中的jSTL根据单选按钮是否选中来启用和禁用下拉列表

javascript - 表单提交转至 Javascript - 并保持在同一页面上

javascript - 有没有办法将一些值传递给服务人员以在安装步骤中使用?

javascript - div 逐一淡入淡出

javascript - 给定一个点和一个平面,当平面缩放而不缩放点时,如何平移点以匹配平面?

javascript - 多个选择框选项的 HTML "multiple"无法识别点击以及 jquery 的委托(delegate)功能

jquery - toggleClass 后不同的 CSS 过渡