2016-06-24 4 views
1

私は作成しているオブジェクトと、そのオブジェクトのデータをさまざまなプロパティに読み込むための関数を持っています。この方法は必要に応じて機能しますが、重複しているような気がします。これはより簡潔に、より良い方法で達成できますか?例えば、使用別にオブジェクトを宣言して読み込むための簡潔な方法

var user = {   
    productLine: { 
     userActiveValue: [] 
    }, 
    id: { 
     PACT: null, 
     EDIPI: null, 
     AKO: null, 
    }, 
    name: { 
     first: null, 
     last: null, 
    }, 
    DMIS: null, 
    region: null, 
    email: null, 
    load: true, 
    loadUser: function (userInfoAPIResponse) { 
     this.id.PACT = userInfoAPIResponse.UID; 
     this.id.EDIPI = userInfoAPIResponse.EDIPN; 
     this.id.AKO = userInfoAPIResponse.akoUserID; 
     this.name.first = userInfoAPIResponse.fName; 
     this.name.last = userInfoAPIResponse.lName; 
     this.DMIS = userInfoAPIResponse.dmisID; 
     this.region = userInfoAPIResponse.RHCName; 
     this.email = userInfoAPIResponse.userEmail; 
     console.log(this); 
    } 
}; 
+0

あなたのオブジェクトのプロパティ名と 'userInfoAPIResponse'によって返された値のプロパティ名との間に一貫性を保つなら、ループを実行するだけです。また、 'loadUser'はプロトタイプの拡張として' user'オブジェクトの外になければなりません。 – Baruch

+0

APIによって返されるオブジェクトは別の部門からのものです。そのAPIから来る命名規則は、私たちが使用したい命名規則とは異なり、最後に変更するオプションはありません。私はそれが同じかもしれないことを望む。 –

+0

私はQwertiyのソリューションが好きですが、オブジェクトリテラルに固執し、作業が完了する前に 'loadUser'が呼び出されることを保証したい場合は、上記のプロパティ定義を取り除くことができます(' productLine'と 'load'を除くあなたの 'loadUser'関数にそれらを割り当てていません)。残りのデータは、データをロードするときに書き込まれ、最初に定義する必要はありません。 –

答えて

5
function User(userInfoAPIResponse) { 
    this.id = { 
    PACT: userInfoAPIResponse.UID, 
    EDIPI: userInfoAPIResponse.EDIPN, 
    AKO: userInfoAPIResponse.akoUserID 
    }; 
    this.productLine = { 
    userActiveValue: [] 
    }; 
    this.name = { 
    first: userInfoAPIResponse.fName, 
    last: userInfoAPIResponse.lName 
    }; 
    this.DMIS = userInfoAPIResponse.dmisID; 
    this.region = userInfoAPIResponse.RHCName; 
    this.email = userInfoAPIResponse.userEmail; 
} 
var user = new User(...); 
+0

良いアイデア。この場合、プロパティが入ってくるオブジェクトに存在しない場合、私は未定義になると思いますか? –

+0

@IthinkIcancode、はい。しかし、同じように行動するのですね。 – Qwertiy

0

user.name = {first:レスポンス.fName、last:レスポンス.lName}など。変数をあるオブジェクトから別のオブジェクトにマップするか、その応答をユーザー変数として使用するだけです。 また、グローバル(または外部)スコープとしてユーザーを宣言するだけで、コールバック関数でサブオブジェクトを宣言して設定することもできます。これは、単純にヌルチェックではなく、他の場所で使用する前に、それらとその親が未定義であることを潜在的にチェックする必要があることを意味します。

+0

Quertiyはより完全な答えでそれに私を打ちそうだ – Alpvax

関連する問題