質問

私は最近、自分自身のJavaScriptライブラリを作って、私は最初に次のパターンを使用します:

var myLibrary = (function () {

  var someProp = "...";

  function someFunc() {
    ...
  }

  function someFunc2() {
    ...
  }

  return {
     func: someFunc,
     fun2: someFunc2,
     prop: someProp;
  }

}());

これに伴う問題は、IDEは、関数リテラルは(私が道であるIntelliJ IDEA 9を使用しています)戻っていることの性質について知らないので、私は本当に、コード補完機能を使用できないことです。

私はjQueryのコードを見て、これを実行しようとしました。

(function(window, undefined) {
    var myLibrary = (function () {

      var someProp = "...";

      function someFunc() {
        ...
      }

      function someFunc2() {
        ...
      }

      return {
         func: someFunc,
         fun2: someFunc2,
         prop: someProp;
      }

    }());

    window.myLibrary = myLibrary;
}(window));

私はこれを試してみましたが、今は別の問題を抱えています。 IDEは本当にどちらかmyLibraryにピックアップしていません。

私は今、問題を解決しています方法がこの方法です。

var myLibrary = {
   func: function() { },
   func2: function() { },
   prop: ""
};

myLibrary = (function () {

  var someProp = "...";

  function someFunc() {
    ...
  }

  function someFunc2() {
    ...
  }

  return {
     func: someFunc,
     fun2: someFunc2,
     prop: someProp;
  }

}());

しかし、それはちょっと不格好ようだ、と私は正確にjQueryがそれをやっている方法を見つけ出すことはできません。私が持っているもう一つの問題は、パラメータの任意の番号を持つ関数を処理する方法である。

例えば、jQuery.bindは2つのまたは3つのパラメータを取ることができ、およびIDEは文句を言うようではありません。私は、関数が0または引数1、引数を取ることができる私のライブラリー、と同じことを実行しようとしました。しかし、IDEは不平を言うと、パラメータの正確な数は、私はこれを処理するにはどうすればよいで。送信されていないことを警告する?

編集

jQueryのは、同じ問題を抱えているので、これはIdea9の問題である場合は、

私は不思議に始めています。私も他のプロジェクトでこの問題を持っていないようです。

役に立ちましたか?

解決

私はヤフーモジュールパターンと私のオートコンプリート作品とIDEAを使用しています。ヤフーのモジュールパターンのグーグルます。

http://www.yuiblog.com/blog/ 2007/6月12日/モジュール・パターン/

http://ajaxian.com/archives/a-javascript-module-pattern

<時間>
TEST = function() {
    var SOME_CONSTANT='asd';

    function privateStuff(){
        var a = 'asd';
        return a;
    }

    return{
        someArray:[],

        someMethod: function(foo, bar){

            var foo = *1
        }
        ,

        myProperty:'test'
    }
}();

TEST.*2
* 1、* 2を持つ私は自動補完をしようとした場所をマークします。

* 1においてiがSOME_CONSTANTとprivateStuff方法を取得し、私はこれを置く場合。(オートコンプリート)iはリターン{}ブロック

の内側すべてのメソッドおよびプロパティへのアクセスを得ます

私は* 2にオートコンプリートをしようとしたとき、私はリターン{}ブロック内のすべてのメソッドとプロパティを取得します。 彼らは "プライベート" であるため、SOME_CONSTANTとprivateStuff方法は、invisibileあります。

私にとってはオートコンプリートのレベルが非常に細かいであること。

他のヒント

あなたはダグラス・クロックフォードについて何かを読めば、私は素晴らしいことだと思います。彼はyahou YUIの枠組みの中で建築家です。その後、あなたは偉大なフレームワークを構築する方法に、より良いアイデアを持つことができます。そして、パラメータの2つのオプションがあります。 1.-オブジェクトの例を介して送信

{ option :{ var1 : "value" , var2:"value"}, var3 : "value" }

そして、あなたはオプションが存在するかどうかを確認することができます。

パラメータが定義されていない場合は、ない偉大にもう一つはチェックです。

function foo(var1,var2){
   var var1_this = null;
     if(var1 != undefined)
      var1_this = var1;
}
新しいJavaScriptフレームワークを構築する理由

とだけコメント?プロトタイプ、jQueryの、Mootols、YUIを使用しています。なぜ車輪の再発明?

これは<のhref = "https://stackoverflow.com/questions/2564032/writing-a-javascript-library-that-is-code-completion-and-code-inspection-にコメントへの返信でありますフレンドリー#答え-2564608" > mwilcoxのポストでます。

の例では、実際に動作すること。 myLibraryvarなしで定義されているので、それが自動的にグローバル名前空間に入れ、などとしてアクセスされます。自己実行機能により作成されたクロージャを通じ、プライベート変数やメソッドは、まだmyLibraryの方法でアクセスできます。あなたは簡単にFirebugのか、Rhinoの中にそれを置くことによって、このアウトを試すことができます。

これらの日、私は私の変数を非表示にする傾向がない、すなわち、I Pseudoclassicalパターンや原型パターンを使用して、私のを接頭辞_のプライベートメソッド意図します:

// Pseudoclassical pattern
function Hello() {}
Hello.prototype = {
    method1: function() {},
    method2: function() {},
    _pseudeoPrivate: function() {}
};

/* Prototypal pattern. To create multiple instances of this object,
   you need a helper function such as
    function beget(o) {
        var F = function() {};
        F.prototype = o;
        return new F;
    }
    var instance = beget(world);
*/
var world = {
    method1: function() {},
    method2: function() {}
};
グローバルな名前空間を汚染から自分のコードを防止するために、

、私は閉鎖中で、私のモジュールをラップし、名前空間に公開APIをエクスポートビルドプロセスを持っています。この技術はまた、jQueryので使用されます。あなたは見ることができる<のhref = "http://github.com/jquery/jquery/tree/master/src/" のrel = "nofollowをnoreferrer" に(intro.js&outro.jsを見て)自分のソースコードで> Githubのでます。

これはまた、グローバルな名前空間の汚染を防止しながら、あなたのAPIを見て、あなたのIDEを可能にするパターン(またはvimのではctags)を使用できるようになります。

私はこのように私のライブラリを書きます

function MyLibrary() {
    // code
}
MyLibrary.prototype.memberFunc = function() {
    // code
}
MyLibrary.prototype.memberVar = 5;

new MyLibrary();

MyLibrary(CTAGSを使用)Geanyこの方法は、十分に認識されている(大部分、例えば、memberVar機能として認識される)と、オートコンプリートが動作するように思われます。私はIDEA9について知らないが、あなたはこの方法(私はそれがもう少し進化しCTAGS以上だ勘を持っている)、それを試すことができます。

私はあなたのプライベート変数を使用しないことをお勧めしますが、私はあなたがそれらをインテリセンスから隠さたい理解しています。これは私がそれを行うだろうかです。

(function(){
    var privateVar = "shhhh!";
    var privateMethod = function(){}


    myLibray = {
        prop:42,
        foo: function(){
            return privateMethod()
        },
        bar: function(){
            return privateVar;
        }
    }

})();

この方法であなたが閉鎖であなたのプライベートのものを持つことができ、あなたのライブラリーにアクセスする必要があります。

[編集しました。私は不器用匿名関数でMYLIBRARYが含まれていませんでしたし、それがプライベートVARSを見ることができませんでした。おっとっと。

ところで、プライベート変数のための私の理由は悪いこと:ます。http:// clubajax。 ORG / javascriptのプライベート-変数-ある-悪/

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top