相关疑难解决方法(0)

ES6模块:导出单类静态方法或多个单独方法

我正在使用ECMAScript6模块.从以下选项中导出/导入模块中的多个方法的正确方法是什么?

单类静态方法:

//------ myClass.js ------

export default class myClass {

  static myMethod1() {
    console.log('foo'); 
  }

  static myMethod2(args...) {
    console.log('bar'); 
  }  

}

//------ app.js ------

import myClass from 'myClass';
myClass.myMethod1();    //foo
Run Code Online (Sandbox Code Playgroud)

多种导出方法:

//------ myMethods.js ------

export function myMethod1() {
    console.log('foo');
}

export function myMethod2() {
    console.log('bar');
}

//------ app.js ------
import {myMethod1, myMethod2} from 'myMethods';
myMethod1()    //foo;


//OR
import * as myMethods from 'myMethods';
myMethods.myMethod1()    //foo;
Run Code Online (Sandbox Code Playgroud)

1)导出:一类只是静态方法感觉有点"代码味道",但同样单独导出所有内容确实感觉有点冗长.它只是开发人员偏好还是存在性能影响?

2)导入:'*as'语法是我首选的方法,因为它允许您使用点符号(引用模块和方法)帮助代码可读性.当我可能只使用其中一种方法时,这是否有性能影响?

javascript module class ecmascript-6

38
推荐指数
2
解决办法
2万
查看次数

Javascript参考与绑定......有什么区别?

我最近在Kyle Simpson的"你不了解JS:ES6"中读到了以下内容

"[ES6模块导出]实际绑定(几乎像指针)到内部模块定义中的标识符."

我的困惑是这些绑定与参考文献有何不同......

我理解JS 中的引用只适用于非原始类型(如对象),因此给定

let object1 = {a: 1};
let object2 = object1;
Run Code Online (Sandbox Code Playgroud)

object1object2现在所说的(他们是两个参考点)同一个对象.
如果我添加一个属性object2,我也添加了一个属性object1

object2.b = 2;
console.log(object1.b); // 2
Run Code Online (Sandbox Code Playgroud)

我可以看到绑定可以应用于基本类型和非基元类型

// foo.js
export let count = 1;
export function incrementCount() { count++; }

// bar.js
import {count, incrementCount} from foo;
console.log(count); // 1
incrementCount();
console.log(count); // 2
Run Code Online (Sandbox Code Playgroud)

绑定就像引用一样,除了原始值也可以共享绑定(而引用仅限于非基本类型)?

我觉得我在这里错过了一些东西......

javascript reference ecmascript-6 es6-modules

11
推荐指数
2
解决办法
2868
查看次数

从ES6模块导入函数表达式或函数声明有什么区别?

据我所知(参见16.3.2.1节),ES6允许函数/类导出操作数的不同语法.差异是指导出的函数是否需要在导入时解释为函数声明,在这种情况下,您可以编写:export default function () {} // (a)或作为函数表达式:export default (function () {}); // (b).

作为一个可能的相关旁注:我读到进口是悬挂的,但我不确定这意味着什么.

以这个例子为例:

import foo from 'my_module'; // (c)

据我了解,上面的语句将我的导出函数保存在foo变量中.这个变量是悬挂的,或是什么,何时?

最重要的是,foomy_module使用函数(a)和使用函数导出时,有什么区别(在设置方面)(b)

javascript ecmascript-6 es6-modules

9
推荐指数
1
解决办法
1892
查看次数

为什么必须在ES2015中指定导出类型(let,var,const ...)?

因为我读这里,ES2015可以导出var,const,let,function,classdefault.

export var myVar1 = ...;
export let myVar2 = ...;
export const MY_CONST = ...;

export function myFunc() {
    ...
}
export function* myGeneratorFunc() {
    ...
}
export class MyClass {
    ...
}
Run Code Online (Sandbox Code Playgroud)

但我不明白为什么.在我的外行看来,应该有named exportsdefault exports.

您输出的类型似乎并不重要.我的意思是,当你export default,你指定类型?不,你没有,它的工作原理.此外,它还能有什么区别出口varlet?它有什么区别export const?导入模块时,无论如何它都是不可变的(AFAIK).

那么,为什么必须指定导出的类型?

javascript commonjs node-modules ecmascript-6 ecmascript-2015

5
推荐指数
2
解决办法
2598
查看次数

ES-2015模块可以自我识别吗?

在javascript ES-2015模块中,模块成员是否可以了解其他模块成员?

例如,在CommonJS模块中,这是可能的:

function square(x) {
    return x * x;
}
function whoAmI() {
    return Object.keys(module.exports); // ['square','whoAmI']
}
module.exports = {
    square: square,
    whoAmI: whoAmI
};
Run Code Online (Sandbox Code Playgroud)

在等效的ES-2015模块中,我们如何编写whoAmI()函数?

export function square(x) {
    return x * x;
}
export function whoAmI() {
    // ?????
}
Run Code Online (Sandbox Code Playgroud)

javascript es6-modules

3
推荐指数
1
解决办法
59
查看次数