1

私はJavascript OOPスタイルのコーディングを学んでいます.いくつか質問があります.主に変数を宣言し、グローバル変数を使用しないことについてです.

質問 1 - 次のコーディングを正しく行っていますか?

ここで、 「フィールド」クラスを宣言します。

/**
 * Display Fields
 */
var Fields = function(){

    this.display = function(fields){

        var test = '1st method of declaring test';
        this.test = '2nd method of declaring test';

        for (var i = 0, len = fields.length; i < len; i++) {

            jQuery('[name=' + fields[i] + ']').closest('.row').css('display', 'block');

        }
    };
}

ここで、クラスFieldsをインスタンス化し、オブジェクトフィールドを作成します。

// Fields Object
var fields = new Fields();

fields.display(requiredFields.concat(normalFields));

質問 2 - クラス変数を宣言する正しい方法はどれですか - この場合: "test" :

this.test = 'value'

あるいは単に:

var test = 'value'

ある方法が他の方法よりも好まれる理由を説明できますか?

質問 3 - for ループ内の「i」は正しく宣言されていますか? これは正しい方法ですか?または、次のようなものを使用する必要があります。

this.i = 0

優れた実践に関するアドバイスをいただければ幸いです。

ネットでallotを読みましたが、OOPはまったく初めてで、正しい道を進んでいることを確認したいと思います。

タイ!

4

4 に答える 4

1

varクラスのスコープ内に変数を作成する場合にのみ使用してください。私の知る限り、そのスコープ内の変数は、同じクラス コンストラクター内の関数から読み取らない限り、外部から読み取ることはできません。これは、プライベート変数の作成にも使用できます。

thisは、 を使用したときに作成されるオブジェクトを指し、使用new Classname()できるプロパティを追加できます。あなたはこれを正しく行っています。次のようにブラケット表記を使用することもできます:this['i have spaces'] = 'Me too!'を使用して後で読み取ることもできますclass['i have spaces']。これにより、演算子または他の JS 構文文字を内部に含むプロパティを追加できます。

2 番目の質問に答えるには、ユーザーにこの変数へのアクセスを許可するかどうかを決定する必要があります。アクセスできるようにする場合は を使用し、それ以外の場合は を使用this.testしますvar test

3 つ目については、はい。

于 2013-09-05T16:11:19.230 に答える
1

Javascript には「クラス」がありません。Javascript は、オブジェクトに基づくプロトタイプの継承を使用します。良い OOP パターンがたくさんあります。私があなただったら、アイデアは「オブジェクト指向」なので、オブジェクトから始めますが、あなたには関数があります(技術的にはオブジェクト自体ですが、我慢してください)。これをチェックしてください:

  var fields = { //this can be the only global variable we ever use.
    options: {
      //default properties object.
    },
    init: function() {
      //do some things that need setup
      this.$elem = $('.myElem'); //for example
    },
    run: function(options) { //describe a general flow here, then write the functions to execute that, again, this is just an example of what might make sense. There are many approaches.
      this.init(); //maybe this is all you need to kick off your app and you could call it at document.ready. Don't let me example make you think too strictly. These are just ideas.
      var data = this.getData();
      this.useData(data);
    }
    getData: function() {
       var data;
       var example = 'blah'; //no need for everything to be a property of the object (this)
       //whatever here, probaby async request, so use promises
       return data;
    }
    //etc
  }

fields.run(); //you could pass some options, by the way. Whatever you do here, it should kick off the app and make everything do what it does. Calling this `init()` often makes more sense, btw.

あなたの質問は特に継承に関するものではありませんが、ここでそれについて読んでください。 Object.create(myObj)いいです :)

これは、 OOPスタイルで書かれた実際の(そしてシンプルな)アプリを示す私の最近の回答です(クリック) 、いじることができるライブデモ(クリック)があります。

これについて具体的な質問がある場合は、コメントでフォローアップしてください。喜んでお手伝いします! より良い慣行に従いたいと思うのは良いことです!

于 2013-09-05T16:16:54.357 に答える