如果我在 JavaScript 中使用 import *,我如何访问 class 名称?
How can I access a class name if I use import * in JavaScript?
在index.html
的头部:
<script src="main.js" type="module"></script>
user.js
文件:
export default class User {
constructor(name, age){
this.name = name;
this.age = age;
}
}
export function printName(user) {
console.log(`User's name is ${user.name}`);
}
export function printAge(user){
console.log(`User is ${user.age} years old`);
}
这个 main.js
可以工作:
import User, { printName, printAge } from '/user.js'
const user = new User('Bob', 11);
console.log(user)
printName(user)
但这行不通,因为它无法识别导出的 class
// name User if I use `import *` to import everything:
import * as MyUser from '/user.js'
const user = new MyUser.User('Bob', 11);
console.log(user)
printName(user)
这是我得到的错误:Uncaught TypeError: MyUser.User is not a constructor
您默认导出了 class,因此它将作为 MyUser.default
在命名空间对象上可用。
如果您想以 .User
的方式访问它,请不要使用默认导出。对于导出多个绑定(具有明确的主要绑定)的任何模块,我会推荐此方法。如果用户可以写 import User from …
而不是 import { User } from …
很重要,您还可以使用多个名称导出 class:
export class User {…}
export { User as default }
在index.html
的头部:
<script src="main.js" type="module"></script>
user.js
文件:
export default class User {
constructor(name, age){
this.name = name;
this.age = age;
}
}
export function printName(user) {
console.log(`User's name is ${user.name}`);
}
export function printAge(user){
console.log(`User is ${user.age} years old`);
}
这个 main.js
可以工作:
import User, { printName, printAge } from '/user.js'
const user = new User('Bob', 11);
console.log(user)
printName(user)
但这行不通,因为它无法识别导出的 class
// name User if I use `import *` to import everything:
import * as MyUser from '/user.js'
const user = new MyUser.User('Bob', 11);
console.log(user)
printName(user)
这是我得到的错误:Uncaught TypeError: MyUser.User is not a constructor
您默认导出了 class,因此它将作为 MyUser.default
在命名空间对象上可用。
如果您想以 .User
的方式访问它,请不要使用默认导出。对于导出多个绑定(具有明确的主要绑定)的任何模块,我会推荐此方法。如果用户可以写 import User from …
而不是 import { User } from …
很重要,您还可以使用多个名称导出 class:
export class User {…}
export { User as default }