0

これは、デフォルトのプロパティを使用してjavascriptクラスを作成する正しい方法ですか(ここでは一部がnullですが)、オブジェクトformat / jsonにリストされている一部のプロパティの特定の値を含むことができる作成引数を追加するオプションもありますか?

また、多くのPersonオブジェクトを作成している場合、メモリを節約するために、これをPersonのプロトタイプに入れる必要がありますか?

これは私のために働いていますが、これを行うのに良い方法かどうか疑問に思いますか?

// PERSON Class -----------------------------------------------
 QM.Person=function(data)
 {
    /* Closure for this */
    var my = this;

    this.PersonID=null;
    this.Name_Last="";
    this.Name_First="";
    this.Date_Birth=null;
    this.Biography="";

    this.loadData=function(obj) {
        for (var i in obj) {
            if (my.hasOwnProperty(i)) {
                my[i] = obj[i];
            }
        }
    }

    this.loadData(data);
}

このクラスを使用して作成する例:

jondoe = new Person();

bob = new Person({Name_First:"Bob",Name_Last:"Bar"});

jondoe.Name_First   /*  ""     */
bob.Name_First     /*   "Bob"  */
4

2 に答える 2

0

私はそのようにはしません。私はします

QM.Person=function(data)
{
    data = data || {};

    this.PersonID= data.PersonId || null; 
    this.Name_Last= data.Name_Last || ""; 
    ...
}

明示的なタイプを気にかけていると仮定していることに気付くでしょう。つまり、を割り当てるときは、ではなくnull、が必要です。についても同じです。nullundefined""

これは、関数を作成して実行してデータをクリーンアップするよりも簡単だと思います

最後に、関数に追加するすべてのメソッドはプロトタイプ上にある必要があります。すべてのインスタンスで同じプロパティを共有する場合を除いて、プロパティをプロトタイプに含めることはできません。データクリーナー以外の方法はないので、あなたが示したものは何もプロトタイプに載せるべきではありません。

于 2012-07-29T02:33:24.727 に答える
0

繰り返しを避けるために、期待するキーのリストと、指定されていない場合に挿入するデフォルト値を作成できます。

MyType = function(data){
    var keys = this.keys,
        data = data || {},
        key

    for (key in keys) {
        if (keys.hasOwnProperty(key)) {
            if (data.hasOwnProperty(key)) {
                this[key] = data[key];
            } else {
                this[key] = keys[key];
            }
        }
    }      
};

MyType.prototype.keys = {
    personId: null,
    firstName: 'A default first name',
    lastName: ''
};

var o1 = new MyType();
var o2 = new MyType({
    personId: 1,
    firstName: 'Override'
});
console.log(o1, o2);
于 2012-07-29T02:52:30.177 に答える