gpt4 book ai didi

javascript - 使用 ES6 模块导出/导入单类方法?

转载 作者:数据小太阳 更新时间:2023-10-29 04:05:53 25 4
gpt4 key购买 nike

假设我在 fileA.js 中有一个像这样的简单类:

class foo {
constructor(x) {
this.name = x
}

fooMethod(x) {
return x + 'hello';
}
}

我想像这样在 fileB.js 中导入和使用 fooMethod:

import { fooMethod } from './fileA';

class bar() {
...
barMethod(x) {
return fooMethod(x);
}
}

如何在 fileA 中编写 export 来实现这一点?

最佳答案

您必须在原型(prototype)上导出它。但请记住,如果您这样做,您将不会在类/对象上下文中调用该函数:

export foo.prototype. fooMethod

但是我建议您不要这样做。


好的,由于您的评论,您需要一种好的方法来为两个类提供共同的功能,这两个类不会扩展相同的基类。一种简单的方法是从两个类中导入一个效用函数:

foo.js

export function foo() {
return this.name;
}

a.js

import {foo} from 'foo';
export class A extends BaseA {
foo() {
foo.apply(this, arguments);
}
}

b.js

import {foo} from 'foo';
export class B extends BaseB {
foo() {
foo.apply(this, arguments);
}
}

这是一个很好的模式,适用于单个功能,但如果您想应用更复杂的功能,则存在局限性。实现这一目标的一个好方法是混合模式:

foo.js

export default superClass => class extends superClass {
foo() {
return this.name;
}
};

a.js

import foo from 'foo';
export class A extends foo(BaseA) {
..
}

b.js

import foo from 'foo';
export class B extends foo(BaseB) {
..
}

这将使您的混合在类 'A'/'B' 和 'BaseA'/'BaseB' 之间创建一个新的匿名类,它提供通用函数 foo

关于javascript - 使用 ES6 模块导出/导入单类方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38308307/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com