2011-07-09 13 views
2

私がjavascriptについて気に入らないことの1つは、何かを行う方法が何百もあるということです。私が知りたいことは、どのようにクラスを宣言するのですか? function()アプローチを使用しますか? Class.create()を呼び出しますか? 「標準的な練習」とは何ですか?メンバー機能を宣言するための「標準的な練習」とは何ですか?私はプロトタイプを使用していますか? myClass.method()を使用しますか?最後に、どのように私は基本的な親子の継承を行うのですか?私が求めている理由は、インターネット上で私はこれらのことをするための多くの方法を受けているからです。私は「標準的な練習」が何であるか知りたい。JavaScriptで親クラスと子クラスを宣言するにはどうすればよいですか?

+5

標準的なプラクティスは、javascriptにはクラスがないことです。 – kennebec

答えて

1

Javascriptでクラスや特にサブクラスを宣言するための "標準的な練習"がないのは、C++で見られる典型的なクラスの構文言語サポートがJavaScriptに実際に組み込まれていないからです。代わりに、それはあなたが同様の機能をどのように生成するかについて、それ自身のトリックの袋を持っています、そして、それらのトリックを表現するための多くの異なった方法があります。実際には標準的な方法はありません。

もっと一般的なjavascriptライブラリ(jQuery、Prototype、YUI、Closureなど)を使用し、サブクラス化のために提供する関数を使用して、独自の "標準"それをやる方法。ライブラリの1つを使用したくない場合は、サブクラス化(YUIのextend()関数に相当)をどこかから借りて、使用するスタイルを決定する必要があります。

大規模なプロジェクトではJavascriptの弱点、それに複数の人が働いているプロジェクト、またはクラスやサブクラスを宣言するための言語構文がないということを個人的には考えています。代わりに、一貫したコードベースを持つ唯一の方法は、あなたが使用する宣言のスタイルを自分で決めてから、プロジェクトのコーディング標準としてそれを強制することです。これは、ブレーススタイルやインデントスタイル。

1

私はStoyan StefanovのJavaScript Patternsをお読みになることをお勧めします。彼はこのトピックについて詳しく説明します。

個人的には、私はむしろModule Patternが好きです。地球規模の宇宙汚染を減らし、使い易い。

編集:自分の "クラス" をインスタンス化する際に

他の回答newキーワードを除外しています。 JavaScriptの「クラス」のインスタンスを正しく生成する方法については、Answer 383503を参照してください。

1

他のポスターとは、あなたの説明のための「標準的な練習」ではありません。ダグラス・クロフォードが彼の本のThe Good Partsで使っているものに似ている、私が今使っていることを分かち合いましょう。私はそれが完璧だと主張しているわけではありませんが、私はこの質問で長い間不満を抱いていました。私はJSコードをOOPの仕方で整理しようとしています。

var ParentClass = function() { 
    var my = {}, // store private member variables and functions 
    that = {}; // store public member variables and functions 
    my.privateVar = 0; 
    that.publicVar = 7; 

    // this won't be visible outside of parent class, 
    // even to children unfortunately 
    my.getPrivateVar = function() { 
    return my.privateVar; 
    }; 

    my.privateFunction = function() { 
    // do stuff 
    }; 

    // this will be visible to children classes and anyone 
    // else using ParentClass 
    that.parentFunction = function() { 
    // here we can access private vars and functions 
    my.privateVar++; 
    my.privateFunction(); 
    }; 

    // and here we return the object that we created 
    // to store the public member variables and functions 
    return that; 
}; 

var ChildClass = function() { 
    var my = {}, // more private vars and functions will live here 
    that = ParentClass(); // and here we subclass ParentClass; 

    // here define more public, private methods as before 
    that.childFunction = function() { 
    }; 

    return that; 
}; 

// test drive it 
var cc = ChildClass(); 
cc.parentFunction(); 
cc.childFunction(); 
console.debug(cc.publicVar); 
// console.debug(cc.privateVar); // undefined 
関連する問題