Как вызвать функцию с тем же именем в другом файле - PullRequest
0 голосов
/ 14 февраля 2019

Я пишу ОС в html, и моя ОС может поддерживать приложения, указав основной скрипт, теперь у меня есть два приложения, одно из которых выполняет файл1, а другое - файл2.И у меня есть три файла:

file1.js

function main() {
    //this is a code
    . . .
}

file2.js

function main() {
    //this is another code
    . . .
}

И я хочу вызвать только одну из их функций, функцию file1:

System.js

var System = {
/*
 *Used Mode:
 *
 *  var app = System.openApp(package);
 */
openApp:function(package) {

    //starts the app:
    var path = "/@APP:/" + package + "/app.xml";

    console.log("Opening " + package + "...");
    var xhttp = new XMLHttpRequest();
    xhttp.open("GET", path, true);
    xhttp.onreadystatechange = function() {
        if (this.readyState == 4 && this.status == 200) {
            console.log("The app \"" + xhttp.responseXML.getElementsByTagName("Manifest")[0].getElementsByTagName("AppName")[0].childNodes[0].nodeValue + "\" was successfully loaded!");
            if (xhttp.responseXML.getElementsByTagName("Manifest")[0].getElementsByTagName("AppMode")[0].childNodes[0].nodeValue = "prompted") {
                this.openMainAct();
            } 
        }
    };
    xhttp.onerror = function() {
        console.error("The app \"" + package + "\" was not found\n  ERROR_CODE:" + xhttp.readyState);
    };
    xhttp.send();

    //subfunctions:
    /*
     *Used Mode:
     *
     *  app.setIcon("path/to/file.png");
     */
    this.setIcon = function(icon) {
        // @TODO: Making Icons, just ignore;
    };
    /*
     *@DEPRECATED: Use the method "openAct"
     *
     *Used Mode:
     *  var MyAct = app.openMainAct();
     */
    this.openMainAct = function() {
        var a = document.createElement("script");
        a.src = this.getAppMainSource;
        document.body[0].appendChild(a);
                    //And HERE opens the main function!
    };

    //vars:
    this.getManifest = xhttp.responseXML.getElementsByTagName("Manifest")[0];
    this.getPackage = package;
    this.getAppFolder = "/@APP:/" + package;
    this.getAppMode = this.getManifest.getElementsByTagName("AppMode")[0];
    this.getName = xhttp.responseXML.getElementsByTagName("Manifest")[0].getElementsByTagName("AppName")[0];
    this.getJSource = this.getAppFolder + "/" + this.getManifest.getElentsByTagName("JSDir")[0];
    this.getJSDir = this.getManifest.getElementsByTagName("JSDir")[0];
    this.getVersion = this.getManifest.getElementsByTagName("Version")[0];
    this.getAppMainSource = this.getJSource + "/" + this.getManifest.getElementsByTagName("AppMain")[0] + ".js";
    this.getAppMain = this.getManifest.getElementsByTagName("AppMain")[0];
    this.getPermissionGroup = this.getManifest.getElementsByTagName("AppPerm")[0];
    this.getPermission = this.getPermissionGroup.getElementsByTagName("AddPerm");
}
};

Но main.js вызывает все функции!

Как показано ниже, нам нужно вызвать функцию для запуска приложения:

var app = System.openApp("a.b.c");

И должна существовать одна папка с таким же именем!

Это мой манифест:

<?xml version="1.0" encoding="utf-8" ?>
<Manifest>
<JSDir>JS</JSDir>
<Version>0.0.1</Version>
<AppName>Documentação de API do EDOS</AppName>
<AppMode>windowed</AppMode>
<AppMain>MainAct</AppMain>
<AppPerm>
    <AddPerm>edos.permission.WRITE_APP</AddPerm>
    <AddPerm>edos.permission.READ_APP</AddPerm>
</AppPerm>
</Manifest>

Извините, если я даю слишком много информации ... PS: Яне хочу API !!

1 Ответ

0 голосов
/ 14 февраля 2019

Экспорт ваших функций внизу ваших файлов.И импортируйте свои функции вверху ваших файлов.

Когда вы импортируете функцию, эта функция будет доступна в этих файлах scope и доступна под именем, которое вы выберете при импорте.

Если вы экспортируете функцию с именем

export main;

Вы можете импортировать ее с псевдонимом.

import { main as mainOne } from "./file1.js"
import { main as mainTwo } from "./file2.js"

// Call functions
mainOne();
mainTwo();

Или, если вы экспортируете ее по умолчанию (вы можете иметь только один экспорт по умолчаниюза файл)

export default main

Затем вы можете импортировать его как угодно

import NewName from "./file1.js"

Для получения дополнительной информации и примеров проверьте документацию для экспорта здесь и для импорта здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...