ES2015是否支持导入类方法?

8

我在一个模块中创建了一个方法:

export function myMethod() {}

在另一个模块中实例化一个类:

注意:此处指在另一个模块中创建类的实例。

import {myMethod} from './methodFile';
class MyClass {
    constructor() {}
    myMethod // doesn't work
}

是否可以将myMethod作为MyClass类的一部分使用?

我正在尝试创建以下代码的等效物:

class MyClass {
    constructor() {}
    myMethod() {}
}
3个回答

6
不,无法在类声明中引用给定值。
但是,类语法大多是一些语法糖,原型继承仍然像以前一样工作。你可以在类定义之后将方法放在原型对象上:
import {myMethod} from './methodFile';
class MyClass {
    …
}
MyClass.prototype.myMethod = myMethod;

如果你的方法需要使用super,你需要使用.toMethod方法


顺便说一句,如果你的 methodFile 中只有这个东西,我建议使用 default 导出。 - Bergi
我建议在说类是语法糖时要谨慎。这可能是现在使用转译器的情况,但不一定适用于内置浏览器实现。 - Phil
2
@Phil 这是一些具体实现的细节。关键是,尽管语法不同,类并没有引入任何新概念,它们仍然只是带有原型对象的构造函数。 - Bergi

1
实际上,在类内部引用外部方法是可能的:
// in methodFile.js:

module.exports = function myMethod() {
  console.log('running in the method!');
}


// in main file

const myMethod = require('./methodFile');

class MyClass {
    myMethod = myMethod;
}

const myClass = new MyClass();

myClass.myMethod(); // running in the method!

-1
深入阐述Bergi的回答。如果您在函数中需要使用this上下文,请改用箭头语法:
import {myMethod} from './methodFile';
class MyClass {
    …
}
MyClass.prototype.myMethod = () => myMethod;

这些方法可以工作,但有点hacky; 当使用Typescript时,您将收到警告,我还没有找到解决方案(这并不是说没有解决方案 - 我仍在熟悉Typescript):

可能可以通过一些聪明的TS声明来解决:

  • 属性“myMethod”在类型“MyClass”上不存在。ts(2339)

当使用this。时:

  • 对象可能为“undefined”。ts(2532)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接