如何从另一个函数中调用函数的方法

时间:2014-11-06 13:05:09

标签: javascript methods scope call

在下面的form对象中,从“检查”功能中,如何调用通知功能的“显示”和“隐藏”方法?

(function (namespace, $, undefined) {
    var form = {
        check : function(){
            form.notification.show(); // Generates an error
        },

        notification : function(){
            this.show = function(){
                ...
            };
            this.hide = function(){
                ...
            };
        }
    };
}(window.namespace = window.namespace || {}, jQuery));

使用form.notification.show()我收到以下错误:

未捕获的TypeError:无法读取未定义的属性“show”

2 个答案:

答案 0 :(得分:1)

尝试在notification之外定义form,然后引用它:

var notification : { // no function here
        show : function(){...}, // avoid "this"
        hide : function(){...}
};

var form = {
    check : function(){
        notification.show(); // <-- Use here
    },

    notification : notification // and here
};

(为清楚起见,我省略了jQuery保护代码。)

下一个问题是,this.show =将函数分配给执行函数this时的notification()this不是notification

答案 1 :(得分:0)

你已经附上它,所以你需要退回它并且会为你公开它,如果你在chrome控制台中鞭打以下内容,你会看到你有权访问表单对象

(function (namespace, $, undefined) {

var form = {

        check : function(){
            form.notification.show(); // Generates an error
        },

        notification : function(){
            this.show = function(){

            };
            this.hide = function(){

            };
        }


};
return{form:form};}(window.namespace = window.namespace || {}, jQuery));

我已经完成了对您的代码的所有操作

return{form:form};

表单对象之后。希望这有帮助

修改

如果您只想公开表单的某些部分,例如只显示通知,则可以像这样修改返回值:

return{form.notification: notification}