Честно говоря, я не знаю, что спросить о моем случае, поэтому я просто добавлю некоторые подробности. Я родом из java, поэтому я знаком с классами.
Возьмем, к примеру, класс и упростим его, отбросим частные поля к публике и без геттера и сеттера
class User{
public String name;
public String email;
}
Это полезно в некоторых случаях, например, иметь массив пользователей, а затем я могу использовать что-то вроде:
for(User user: usersList){
user.name='some new value'
//since user is a class, code assist, suggests the name and also if I have user.namee it throws an error
}
Перейдя в javascript, я могу получить массив и сделать что-то вроде
for (let user of usersList){
user.name='some new value'
//however if I type user.nammee no error is thrown and code assist does not know what to recomment
}
Я думаю, что теперь вы можете получить эту идею. Я хочу, чтобы это упростило правильное получение полей объекта с помощью кода, а также избежать ошибок ввода из-за плохого ввода имени свойства. Классы Javascript из того, что я вижу, имеют только методы... так что я могу применить в этом случае?
JavaScript позволяет ссылаться на свойства, которые у объекта отсутствуют: вы можете добавить их ad-hoc, и если вы читаете несуществующие свойства, вы просто получите undefined
. Так работает JavaScript.
Если вы хотите получить сообщение об ошибке при попытке назначить несуществующее свойство, рассмотрите метод Object.seal
, который вы можете применить в конструкторе для вашего класса:
"use strict";
class User{
constructor (name, email) {
this.name = name;
this.email = email;
// Seal will disallow new properties
Object.seal(this);
}
}
const user = new User();
user.name = "Jeff";
console.log(user); // Shows property with "Jeff"
user.nammmeeee = "Jeff"; // Produces error
Обязательно используйте строгий режим ("use strict"
), поскольку в противном случае эти ошибки будут подавлены.
проверить машинопись
и эта "скрипка" на игровой площадке TypeScript
class User {
constructor(public name: string, public email: string = "") { }
/*
//shorthand for
public name: string;
public email: string;
constructor(name:string, email:string="") {
this.name = name;
this.email = email;
}
*/
}
var usersList = [
new User("Jack"),
new User("Jill"),
new User("Joe")
];
for (let user of usersList) {
user.email = user.name + "@mail.com";
}
и поскольку userList
распознается как тип User[]
, let user
также вводится как let user:User
Вы можете сделать это в javascript. Только это, ваш список пользователей будет массивом, в котором у вас будут ваши пользователи. Петля будет для цикла от 0 до длины-1. У этого класса будет такой синтаксис, как этот.
var userclass= {Имя: 'xyz', Addr: 'address',..... другие реквизиты}