2016-08-04 7 views
0

でそれを使用することができますし、私はPDFJSビューアサンプルでこれを見つけた:どのような種類のJavaScript構文ですか? "var XX =(function(){...})();"どのように私は活字体

var XX = (function XXClosure() { 
    function XX(options) { 
    ... 
    }, 
    XX.prototype = { 
    myMethod1: function(){...}, 
    myMethod2: function(){...}, 
    ... 
    } 
    return XX; 
})(); 

私はそれが何であるかを任意のアイデアなしに、このような構築物を作製し、このようにjavascriptのプロジェクトでそれを使用しました:

var myXX = new XX(myOptions); 
myXX.Method1(); 

これは非常にうまくいきます。

declare XX:any 
import myJavascript.js; 
var myXX = new XX(myOptions); 

と私は、実行時にエラーが発生します:

今私は活字体のプロジェクトでは、この構文を使用しようとすると、「XXは、コンストラクタではありません」

私が作る、なぜ私に聞かないでくださいこのように、他にもあるかもしれませんが、私はPDFJS viewer.jsからコピーしました。

しかし今、typescriptプロジェクトでは、それもうまくいくはずです。誰かがこれに対する解決策を持っていますか?

+1

[JavaScriptの(function(){})()構文は何ですか?](http://stackoverflow.com/questions/8228281/what-is-the-function-construct-in-javascript ) – Teemu

+0

正解ですが、それは私の質問の最初の部分だけに答えます。 – Terkosh

答えて

1

彼らは基本的にself-invoking関数を使用してES6クラスを作成しています。つまり、(function(){})()です。これは変数XXに割り当てられます。

活字体における類似の構築物は、あなたがクラスをエクスポートする場合

var xx = new XX(options); 

とJSオブジェクトは、そして、それは何の問題もなくインポートする必要があるでしょう、あなたとしてこれをインスタンス化します

class XX { 
    constructor(options){ 
    //do stuff with options 
    } 
    myMethod1(){} 
    myMethod2(){} 
    ...//additional methods 
} 

だろう。

export class XX{...} 
+0

ありがとうございます。今私はそれが何であるか知っています。クラスの構成は良いアイデアですが、ES6の機能を使用できるかどうかを明確にする必要があります。 – Terkosh

+0

Typescriptはクラスを許可します。あなたのクラスは、元のコードのように見えるものに変換されます。クラス:http://www.typescriptlang.org/docs/handbook/classes.html、モジュール:http://www.typescriptlang.org/docs/handbook/modules.html – SethWhite

+1

コードは異なるプロジェクトの共通コードです。それはts-とjs-projectsでも有効です。 – Terkosh

1

これは、あなたがTypeScriptJavaScriptから注入するために何かをしたい場合は、.d.tsの拡張子を持つファイルに declareステートメントを使用する必要がありますIIFE

var XX = (function XXClosure() { 
     function XX(options) { 
     ... 
     }, 
     XX.prototype = { 
     myMethod1: function(){...}, 
     myMethod2: function(){...}, 
     ... 
     } 
     return XX; 
    })(); 

のように呼ばれています。このため

ここ.d.ts

を見ても、あなたはdeclare var XX:any使用する必要があります - あなたが使用することができ、活字体のためにIIFE

あるtoskv

+0

宣言はどこでも動作します。彼はそれが変数だと言う必要があるので、** var ** XX:any;を宣言してください。 – toskv

+0

@toskv ok。私はあなたが最初にjsコードを実行したいときに、それを '.d.ts'ファイルに入れる必要があることを知っています –

+0

あなたの答えをありがとう。今私はそれが何であるか知っています。次回は.d.tsファイルのエントリを試してみます。 – Terkosh

1

まずへ>おかげでclassdocumentation

+0

ありがとうございます。今私はそれが何であるか知っています。クラスの構成は良いアイデアですが、ES6の機能を使用できるかどうかを明確にする必要があります。 – Terkosh

0

ご協力いただきありがとうございます。私の質問の最初の部分は完全に答えられています。 2番目の部分は、私は吸うことで解決した。私は 'strict strict'行を削除し、意味のないエラーメッセージを出しました: '未定義変数の使用'。

私はこの時点でロードされていない他のjsモジュールからのグローバルオブジェクト変数を 'コンストラクタ'で使用します。 htmlテンプレートではなく、メインのhtmlページの先頭ブロックに「script src = '...'」を置くと、私の問題が解決しました。

関連する問題