2012-01-14 11 views
4

私はthisthis(ありがとうGoogle) を読んだことがありますが、それでも十分です。場合、私はそれはそれはプロトタイプで可能だと同様に例えば、何かをすることは可能ですが、任意のプラグインのアドオンなしで、まっすぐに箱から出して、知りたい:jQueryとオブジェクト指向のJavaScript - howto?

MyClass = Class.create(Table, 
{ 
    cookieName: 'w_myclass', 
    prefix: 'myclass', 
    ...blabla... 

    // function 
    initStr: function() 
    { 
    ...blabla... 
    }, 

    // another function 
    getIndice: function(param) 
    { 
    ...blabla... 
    return 0; 
    } 

}); 

任意のアイデア/提案を歓迎します。

+1

はなぜジャバスクリプトのネイティブオブジェクト指向の機能を使用しない:それは次のようになります

? – Marcin

+1

JavaScriptは、「オブジェクト指向」と言います。あなたはクラスベースの継承について質問しています。 –

+0

すぐに使用できるソリューションはありません。しかし、別の言語http://coffeescript.org/があります。これは、同等のJSに一対一でコンパイルするため、すべてのjsフレームワークでcoffescriptの機能を使用できます。 – Fivell

答えて

3

javascriptとjqueryを使用してオブジェクト指向のソリューションをご希望の場合は、イベントコントローラを設定するオブジェクトをjavascriptで定義できます。

この投稿の後半はhttp://www.codescream.com/?p=18です。ここでは、オブジェクト指向の構造に近いjavascriptでオブジェクトを作成する方法についての履歴書を書きます。

function myObject(constructorParam1, constructorParam2, anotherOne, blabla){ 

    var text = ""; 
    // this event will be set everyTime you run myObject 
    $(".foo").click(function(){ 
    text = $(this).text(); // copies the text inside the elements ".foo" to a local variable 
    doSomething(); 
    }); 

    function aPrivateFunction1(){ 


    } 

    function aPrivateFunction2(){ 

    } 

    function internalAdd(a,b){ 
    return a+b; 
    } 

    var size = 1; // privateVaribale 
    var name = blabla; 


    if(name===undefined){ 
    name="No name"; 
    } 

    aPrivateFunction1(); // run "aPrivateFunction1() 

    // you can consider all code above as being part of the constructor. 
    // The variables declared above are private, and the functions are private as well 

    // bellow are public functions that you can access in an OOP manner 
    return { 
    getSize: function(){ 
     return size; 
    }, 

    setSize: function(newSize){ 
     size = newSize; 
    }, 

    getName: function(){ 
     return name; 
    }, 

    setName: function(newName){ 
     name = newname; 
    }, 

    addAndTurnPositive: function(n1,n2){ 
     var val = internalAdd(n1,n2); 
     if(val<0){ 
      return val*-1; 
     } 
     return val; 
    } 
    } 
} 

// then you can run it like 
var anInstance = myObject("aaa",1234,"asdak",123); 
anInstance.setSize(1234); 
var t = anInstance.addAndTurnPositive(-5,2); 
+0

この種のことは、閉鎖を扱うことに慣れていない初心者のJSプログラマーにはとても不快なものになると思います。賢明な同僚は、ネイティブJavaScriptの上に何も書き込まないようにすることが、あなたの目標であると私に言ってきました。フレームワークを見つける。 –

+0

彼はもっとオブジェクト指向の方法でjavacriptを使う方法を尋ねました。これはそれです:pと私はあなたがちょうど言ったことに同意します。 – fmsf

+0

それは大丈夫です。それは私の意見ですが、私はそれが多くの人々が共有するものだと思います。 –

0

一言で言えば、 jQueryはクラスと継承の機能を提供していません。 klassなどの別のライブラリを含める必要があります(ただし、jQuery pluginがjQueryと密接に結びついています)。

+0

jQuery-klassプラグインのコードはありません。このプロジェクトは2008年以降に死んでしまったようです。誰かが新しいプロジェクトを作成し、コードを再作成することに決めました。 http://code.google.com/p/jquery-klass-plugin/ – knb

6

JQueryはクラスフレームワークではありませんでした。それはページ操作とツール(AJAXのような)に関するものです。フォークで釘を打つことはできますが、なぜハンマーを使わないのですか?

高度に熟練したJavaScriptプログラマでない限り、ネイティブJavaScriptを使用してクラスベースの継承システムを作成することは問題を求めています。 Douglas Crockford will tell you it's possibleしかし、彼は閉鎖などの複雑さについて深い理解を持っています。また、ネイティブ継承機能を使用すると、システムが大きくなると非常に迅速に持続不可能になります。

James CoglanのJS.Classフレームワークを強くお勧めします。クラスの定義は、あなたの例とほとんど同じです。ネイティブJSではありませんが、JQueryでうまく動作します。

関連する問題