《javascript 类表达式》正文开始,本次阅读大概3分钟。
Javascript 中的类表达式是一种用于创建对象的语法。
与传统的类定义语法相比,类表达式的语法更加灵活,可以在任意的代码块中定义类,并且可以将类作为参数或返回值来进行传递。
let Animal = class { constructor(name) { this.name = name; } sound() { console.log('我会叫'); } }; let cat = new Animal('小猫'); console.log(cat.name); cat.sound();
在上面的代码中,我们使用了一个类表达式传递了一个类作为参数。在这个例子中,我们定义了一个名为“Animal”的类,它包含一个构造函数和一个名为“sound”的方法。我们通过“new”关键字创建了一个名为“cat”的对象,并且可以通过“cat.name”和“cat.sound()”来调用它们。
与传统的类定义语法相比,类表达式所定义的类是匿名的,因此我们可以将其赋值给一个变量或对象的属性中。
let Animal = class { constructor(name) { this.name = name; } sound() { console.log('我会叫'); } }; let cat = { type: 'pet', action: new Animal('小猫') }; console.log(cat.action.name); cat.action.sound();
在上面的代码中,我们将我们的 “Animal” 类保存到对象“cat.action”中,并且可以像上面一样调用它。
如果您只需要一个类表达式来创建一个单一对象,则可以省略类名,直接使用“new”关键字,并在大括号内添加类的构造函数和属性/方法。
let cat = new class { constructor(name) { this.name = name; } sound() { console.log('我会叫'); } }('小猫'); console.log(cat.name); cat.sound();
在上面的代码中,我们使用一个直接从类表达式创建的对象,省略了类名。我们在新建立的对象中设置了“name”属性,并通过“sound()”方法来调用“console.log”。
类表达式也可以与闭包结合使用来创建“私有变量”。
let Cat = (function () { let mood = 'happy'; class Cat { constructor(name) { this.name = name; } sound() { console.log('我会叫'); } getMood() { return mood; } } return Cat; }()); let cat = new Cat('小猫'); console.log(cat.getMood());
由于类表达式是一个表达式,因此您可以任意嵌套它们。
let Cat = class { constructor(name) { this.name = name; } sound() { console.log('我会叫'); } }; let Home = class { constructor(name) { this.name = name; } welcome() { console.log('欢迎回家'); } getCat() { return new Cat('小猫'); } }; let home = new Home('我的家'); let cat = home.getCat(); console.log(cat.name);
上面的代码中,“Cat” 和 “Home” 都是类表达式。我们在 “Home” 类中定义了一个方法,该方法返回一个从 “Cat” 类创建的新实例,并且可以在主要代码中调用。这使得代码更灵活,因为您可以在任何地方使用类表达式。
因此,类表达式是一种非常有用的 JavaScript 语法结构,因为它提供了极高的灵活性,可以在任何地方定义类,并且可以将这些类作为参数和返回值进行传递。