如何加载具有相同名称的函数

时间:2014-09-05 06:52:24

标签: javascript sapui5

我正在通过Openui5开发一个门户网站。我的门户有2个应用程序。我已将代码组织在文件夹中:

root
  |
  |____app1
  |____app2

在app1文件夹中,我有util1.js和函数getInfo(),在app2 folter中我有util2.js和函数getInfo()(同名)。

现在我的门户网站,在root登录时,加载所有子文件夹中的所有js文件,只有最后加载的getInfo()函数工作(正确???)

我认为将来只有在用户输入appX时动态加载appX的js文件。 这样它可以正常工作吗?

1 个答案:

答案 0 :(得分:2)

不要将getInfo个功能设为全局。 (即使你只有其中一个,这也是一个很好的建议,全局命名空间非常拥挤。)

相反,理想情况下,门户网站的应用程序只有一个全局,可能称为Apps,它是一个对象。然后让每个应用程序使用应用程序的名称将自己作为属性添加到该对象。所以:

portal.js

var Apps = {};

app1.js

Apps.App1 = {
    getInfo: function() {
        // ...
    },
    somethingElse: function() {
        // ...
    }
    // ...and so on...
};

app2.js

Apps.App2 = {
    getInfo: function() {
        // ...
    },
    somethingElse: function() {
        // ...
    }
    // ...and so on...
};

或者您可以更进一步,拥有应用注册功能:

portal.js

var MyPortal = {
    apps:     {},
    register: function(name, app) {
        if (this.apps.hasOwnProperty(name)) {
            throw new Error("There is already an app called '" + name + "' registered.");
        }
        this.apps[name] = app;
    }
};

app1.js

MyPortal.register("App1", {
    getInfo: function() {
        // ...
    },
    somethingElse: function() {
        // ...
    }
    // ...and so on...
});

app2.js

MyPortal.registerApp("App2", {
    getInfo: function() {
        // ...
    },
    somethingElse: function() {
        // ...
    }
    // ...and so on...
});