Javascript 引用函数数组中的另一个函数

Javascript 引用函数数组中的另一个函数,javascript,requirejs,Javascript,Requirejs,我使用的是require.js,有一个函数库,我在多个地方使用。我这样定义函数: define(function (require) { "use strict"; var $ = require('jquery'); var UsefulFuncs = {}; UsefulFuncs.hideAlert = function() { $('.alert').hide(); }; UsefulFuncs.loadURL

我使用的是require.js,有一个函数库,我在多个地方使用。我这样定义函数:

define(function (require) {

    "use strict";

    var $ = require('jquery');

    var UsefulFuncs = {};

    UsefulFuncs.hideAlert = function() {
        $('.alert').hide();
    };


    UsefulFuncs.loadURL = function (url){
            navigator.app.loadUrl(url, { openExternal:true });
            return false; 
    };


    UsefulFuncs.linkClicked = function (e) {    
        e.preventDefault();
        var url = $(e.currentTarget).attr("rel"); 
        this.loadURL(url);
    };


    return UsefulFuncs;

});
然后,在我的主干视图中,我使用以下命令调用库中的函数:

UsefulFuncs         = require('app/utils/useful_func'),

....

UsefulFuncs.linkClicked
这适用于库中的任何独立函数,例如hideAlert()。但是,当库中的一个函数引用另一个函数时,例如linkClicked()调用loadURL(),我会得到一个错误:

Uncaught TypeError: Object [object Object] has no method 'loadURL'. 

有没有关于如何引用loadUrl()的想法?

试试这样的方法:

define(function (require) {

    "use strict";

    var $ = require('jquery');

    var hideAlert = function() {
        $('.alert').hide();
    };


    var loadURL = function (url){
            navigator.app.loadUrl(url, { openExternal:true });
            return false; 
    };


    var linkClicked = function (e) {    
        e.preventDefault();
        var url = $(e.currentTarget).attr("rel"); 
        loadURL(url);
    };


    return {
        hideAlert : hideAlert,
        loadURL : loadURL,
        linkClicked : linkClicked
    };

});
UsefulFuncs.linkClicked()

我假设您将
UsefulFuncs.linkClicked
设置为事件的处理程序

如果您这样使用它:

define(function (require) {

    "use strict";

    var $ = require('jquery');

    var hideAlert = function() {
        $('.alert').hide();
    };


    var loadURL = function (url){
            navigator.app.loadUrl(url, { openExternal:true });
            return false; 
    };


    var linkClicked = function (e) {    
        e.preventDefault();
        var url = $(e.currentTarget).attr("rel"); 
        loadURL(url);
    };


    return {
        hideAlert : hideAlert,
        loadURL : loadURL,
        linkClicked : linkClicked
    };

});
UsefulFuncs.linkClicked()
,函数中的
将引用
UsefulFuncs
,因此
此.loadURL()
将有效

但是,由于您将它设置为事件的处理程序,因此可以通过其他方式调用它,
this
被设置为其他对象(可能是触发事件的元素)。为避免事件处理机制更改您的
,您可以在分配函数时绑定该函数:

element.onclick = UsefulFuncs.linkClicked.bind(UsefulFuncs);
另一种解决方法是避免在处理程序中使用
this
,如下所示:

UsefulFuncs.linkClicked = function (e) {    
    e.preventDefault();
    var url = $(e.currentTarget).attr("rel"); 
    UsefulFuncs.loadURL(url);
};

这会在
UsefulFuncs
上创建一个闭包(第一种方法也可以,但它更标准化)。

我知道这是一个解决方法,因为它也应该与“This”一起使用。