#javascript #node.js #express #ecmascript-6
#javascript #node.js #выражать #ecmascript-6
Вопрос:
Я пытаюсь создать структуру объекта, используя классы в javascript. У меня есть проблема с созданием объектов, которые включают вложенную структуру. Например ..
{
"id" : 1,
"name" : "mark",
"phoneNumber" : "123456789",
"dob" : "2010-08-20",
"address" : {
"latitude" : 123214.1231,
"longitude" : 1231243.12,
"houseNumber" : "1-2-3",
"landmark" : "square-garden",
"pinCode" : "134567876"
}
}
address
недвижимость имеет отдельную внутреннюю структуру. Как создать класс для вышеупомянутого JSON?
Я немного новичок в JS. Пожалуйста, помогите мне. Ниже приведены вещи, которые я пробовал.
У меня есть класс UserCreationDto
class UserCreationDto {
id;
name;
phoneNumber;
dob;
address;
constructor(id, name, phoneNumber, dob, address) {
this.id = id;
this.name = name;
this.phoneNumber = phoneNumber;
this.dob = dob;
this.address = address;
}
}
и класс AddressDto
class AddressDto {
latitude;
longitude;
houseNumber;
landmark;
pinCode;
constructor(latitude, longitude, houseNumber, landmark, pinCode) {
this.latitude = latitude;
this.longitude = longitude;
this.houseNumber = houseNumber;
this.landmark = landmark;
this.pinCode = pinCode;
}
}
Я хочу address
, чтобы свойство of UserCreationDto
было of AddressDto
. Как я могу это сделать? UserCreationDto
Можно использовать вышеуказанный класс.
Но, когда я это делаю, IntelliSense отсутствует
let userCreationDto = new UserCreationDto();
userCreationDto.address.{i-get-random-properties-here}
Я пытался сделать это
UserCreationDto.prototype.address=new AddressDto()
С помощью описанного выше подхода я получил IntelliSense, но при использовании прототипа значения являются общими для всех экземпляров UserCreationDto
.
Если я просто продолжу с вышеупомянутым классом UserCreationDto
, то я не получу никакого IntelliSense.
IDE позволяют чему-либо подталкивать к address
собственности.
Как создать вложенную структуру, как обсуждалось выше? Какой может быть классовая структура?
Комментарии:
1.
new UserCreationDto (1, 2, 3, 4, new AddressDto(1, 2, 3, 4, 5))
2. @VLAZ Как написать класс для этого? Создание экземпляра объекта — это нормально. Помогите мне в создании класса.
3. Вы создали классы. Если вы правильно создадите их экземпляры, то также получите правильные данные. jsbin.com/vijeqoroqi/edit?js ,консоль
4. @VLAZ вы говорите, что вышеуказанные классы подходят. Итак, когда я получаю объект, подобный указанному выше, из какого-либо http-post-запроса, сначала я должен создать AddressDto , заполнить его. затем создайте UserCreationDto и присвоите свойство address уже созданному экземпляру AddressDto. Это будет работать нормально. Есть ли какой-нибудь способ получить intellisense? Я имею в виду, мы получаем intellisense для id, name, PhoneNumber, dob, address, поскольку они являются прямыми свойствами класса. Как получить intellisense поверх свойств адреса из экземпляра userCreationDto?
5. @protonsphere Какую среду IDE вы используете? Вам нужно будет сообщить intellisense, что
address
свойство имеет типAddressDto
.
Ответ №1:
Я думаю, что этот способ работает, вместо использования класса просто используйте функции:
function AddressDto(latitude, longitude, houseNumber, landmark, pinCode) {
this.latitude = latitude || 0;
this.longitude = longitude || 0;
this.houseNumber = houseNumber || '';
this.landmark = landmark || '';
this.pinCode = pinCode || '';
}
function UserCreationDto(id, name,phoneNumber, dob, address) {
this.id = id || 0;
this.name = name || '';
this.phoneNumber = phoneNumber || '';
this.dob = dob || '';
this.address = address || new AddressDto();
}
const user = new UserCreationDto();
user.id = 1;
user.name = 'test';
user.phoneNumber = '1234567890';
user.dob = '12/12/12';
console.log(user.address.latitude);
Спасибо