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 語法結構,因為它提供了極高的靈活性,可以在任何地方定義類,并且可以將這些類作為參數和返回值進行傳遞。