Cześć, ostatnio bawię się trochę obiektami w JS i mam problem z podpowiedziami w IDE co do zagnieżdżonych obiektów w obiekcie, choć funkcjonalnie wydaje mi się że działa wszystko dobrze.
var result = Service.Response.UserData(resObj);
czyli jak wpiszę result.
to mi podpowiada że zawiera własności "timezone" i "account_data" i w przypadku tego drugiego wiem że jest to obiekt Service.Types.AccountData. Ale kiedy wybiorę własność result.account_data.
to mi już dla niej nie podpowiada jakie ma własności. Ale kiedy jej użyję np tak result.account_data.id
to mimo że nie podpowiada w IDE składni to wyświetli mi identyfikator użytkownika.
Poniżej fragment kodu. I pytanie co robię źle ?
Przykład 1
var Service = {
//...
Response : {
/**
* User Data Response
*
* @param {type} obj
* @returns {Service.Types.UserData}
*/
UserData : function(obj) {
var result = Service.Types.UserData;
result.timezone = obj.timezone;
result.account_data = Service.Response.AccountData(obj.account_data);
return result;
},
/**
* Account Data Response
*
* @param {type} obj
* @returns {Service.Types.AccountData}
*/
AccountData : function(obj) {
var result = Service.Types.AccountData;
result.id = obj.id;
result.name = obj.name;
result.email = obj.email;
return result;
}
},
Types : {
AccountData : {
/** @type integer*/
id:0,
/** @type string*/
name:'',
/** @type string*/
email:'',
},
UserData : {
/** @type {Service.Types.AccountData} */
account_data:null,
/** @type integer */
timezone:0
}
}
};
Przykład 2
Próbowałem to robić jeszcze tak, tylko w tym przypadku wcale nie uzyskuje listy własności nawet w przypadku UserData, przypuszczam że dlatego że pewnie trzeba użyć @property i je zdefiniować, tylko nie wiem gdzie.
//...
Response : {
/**
*
* @param {type} obj
* @returns {Service.Types.UserData}
*/
UserData : function(obj) {
return new Service.Types.UserData(obj);
},
/**
*
* @param {type} obj
* @returns {Service.Types.AccountData}
*/
AccountData : function(obj) {
return new Service.Types.AccountData(obj);
}
},
Types : {
/**
*
* @param {type} obj
* @returns {Service.Types.UserData}
*/
UserData : function(obj) {
this.timezone = obj.timezone;
this.account_data = new Service.Types.AccountData(obj.account_data);
},
/**
*
* @param {type} obj
* @returns {Service.Types.AccountData}
*/
AccountData : function(obj) {
this.id = obj.id;
this.name = obj.name;
this.email = obj.email;
}
}
};