在node.js中使用for循环中的类

时间:2017-08-02 12:52:04

标签: javascript node.js

老实说,我不知道该向我提出什么要求,所以我只想补充一些细节。我来自java,所以我熟悉类。

让我们以一个类为例,为了简单起见,将私有字段删除为public,没有getter和setter

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类只有方法......那么在这种情况下我可以应用什么呢?

3 个答案:

答案 0 :(得分:1)

结帐Typescript

this "fiddle" on the TypeScript Playground

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

答案 1 :(得分:0)

JavaScript允许引用对象没有的属性:您可以临时添加它们,如果您读取不存在的属性,则只需获取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"),否则会抑制这些错误。

答案 2 :(得分:-2)

您可以在javascript中执行此操作。就是这样,您的用户列表将是您将拥有用户的阵列。循环将从0循环到长度为1。这个类会有这样的语法。

var userclass = { 名称:' XYZ&#39 ;, 地址:'地址&#39 ;, .....其他道具 }