如何导入类的静态成员?

时间:2017-08-11 16:37:57

标签: javascript ecmascript-6 babeljs

我试图通过使用标准导入语法将类的静态成员导入到文件中。给出背景:

解构适用于类的静态方法:

class Person {
    static walk() {
        console.log('Walking');
    }
}

let {walk} = Person;
console.log(walk); // walk function

但是,我认为导入的行为类似于解构分配。如果这是真的,那么我希望以下工作。但是,当我尝试导入walk方法时,它只会返回undefined

通过进口解构,为什么不起作用?

person.js

export default class Person {
    static walk() {
        console.log('Walking');
    }
}

walker.js

import {walk} from './person';
console.log(walk); // undefined

由于这似乎不起作用,如何将静态方法从类导入到另一个模块?

2 个答案:

答案 0 :(得分:2)

export default可与ES6中的正常导出混合使用。例如:

// module-a.js
export default a = 1;
export const b = 2;

// module-b.js
import a, { b } from "./module-a";
a === 1;
b === 2;

这意味着导入括号与destructor assignment不同。

在ES6规范中实际上无法实现您想要实现的目标。最好的方法是在导入后使用解构

import Person from "./person";
const { walk } = Person;

答案 1 :(得分:1)

您使用的语法实际上是命名导入,而不是解构分配,尽管它们看起来很相似。 ES6中没有解构导入。您所能做的就是在下一行添加解构赋值,但请记住,当导入是循环时,这将会中断。

import Person from './person';
const { walk } = Person;
console.log(walk);