0

次のディレクトリ構造があります。

/Admin/Grid
   abc.ts  // this file contains the one function abc()
   xxx.ts  // this file contains the one function xxx()

/Admin/Dialog
   abc.ts  // this file contains the one function abc()

3 つすべての JavaScript をブラウザにロードします。

関数 xxx() は次のようになります。

function xxx() {
   // do abc
   abc();
}

/Admin/Dialogディレクトリのファイル内にある関数abcを実行するように関数xxxに指示できるtypescriptを使用する方法はありますか?

4

2 に答える 2

1

これらのファイルをすべて参照していて、関数がすべてグローバル スコープ内にある場合 (質問のように見えます)、どこからでも関数を呼び出すことができます。

調査したい TypeScript の利点の 1 つは、モジュールとクラスを使用して関数とデータのグループをカプセル化することです。これにより、プログラムを編成し、独自の関数と変数のグローバル スコープを明確に保つことができます。

質問に戻ると、同じ名前の 2 つの関数が必要な場合、両方を同じスコープに入れることはできません。次のいずれかが必要です。

  • 名前を変更
  • それらをクラス/モジュールで囲みます
  • abc 関数を含むファイルの 1 つだけを含めます

これがあなたの質問に基づく例です。

class OtherClass {
    abc () {

    }
}

class MyClass {
    xxx () {
        var oc = new OtherClass();
        oc.abc();
    }
}

var mc = new MyClass();

mc.xxx();
于 2012-11-13T13:38:24.070 に答える
0

JavaScript でお答えします。

基本的に、xxx() に /Admin/Dialog/abc.ts 内の abc() を実行するように指示する方法はありません。これは、/Admin/Dialog/abc.ts が読み込まれると、/Admin/Grid/abc.ts の abc() がオーバーライドされるためです。

あなたができることは次のようなものです:

/管理者/グリッド/abc.ts

var grid = {
    abc: function() {
        ....
    }
}

/管理者/ダイアログ/abc.ts

var dialog= {
    abc: function() {
        ....
    }
}

そして xxx() で:

function xxx() {
   grid.abc();
}

このように、ダイアログの abc() はグリッドの abc() をオーバーライドしません。

編集: TypeScript の場合:
/Admin/Grid/abc.ts

class Grid {
    abc() {
    }
}

/管理者/ダイアログ/abc.ts

class Dialog {
    abc() {
    }
}

そして、xxx​​.ts で:

class Samantha {
    xxx () {
        var grid = new Grid ();
        grid.abc();
    }
}

var me = new Samantha ();
me .xxx();

お役に立てれば!

于 2012-11-13T13:40:08.507 に答える