Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何命名es6类(用于React组件)_Javascript_Reactjs_Ecmascript 6 - Fatal编程技术网

Javascript 如何命名es6类(用于React组件)

Javascript 如何命名es6类(用于React组件),javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,这是第六部分的问题,第二部分的反应问题。我试着用在ES6课程和巴贝尔的React中。所以我想真正的问题是如何命名空间es6类,这样我就可以做这里解释的事情: 由于我收到意外的令牌错误: class Headline extends Component { ... } class Headline.Primary extends Component { ... ^ 该语法要求标准BindingIdentifer作为类名。点不是标识符名称中的有效字符 在OP中的链接中

这是第六部分的问题,第二部分的反应问题。我试着用在ES6课程和巴贝尔的React中。所以我想真正的问题是如何命名空间es6类,这样我就可以做这里解释的事情:

由于我收到意外的令牌错误:

class Headline extends Component { ... }

class Headline.Primary extends Component { ...
              ^
该语法要求标准BindingIdentifer作为类名。点不是标识符名称中的有效字符

在OP中的链接中使用的上下文中,“名称空间”是一个对象,并且使用点表示法将属性逐个添加到该对象中进行属性访问

您可以通过使用类表达式来复制它:

“严格使用”
var ns={}
ns.MyClass=class{
构造函数(){
console.log('in constructor')
}
}

new ns.MyClass()
这在ES6中并没有真正改变,您仍然需要执行一个赋值:

Headline.Primary = class Primary extends Component { … };
然而,在ES6中使用诸如
Headline
之类的类,因为名称空间越来越不受欢迎(而且以前一直是一种值得怀疑的做法),您应该转而利用新的模块系统。将
Primary
导出为命名导出,而不是导入
Headline
类,而是将
import*作为来自…

的标题,这也与此问题有关

在模块对象部分中,描述了您可以执行以下操作:

// headline.js file
export {Headline, Primary}
class Headline {}
class Primary {}

// In another module...

import * as Headline from "headline";

let h = new Headline.Headline();
let hp = new Headline.Primary();
这并不是你想要做的,而是一种选择

另一种方法几乎就像@Bergi已经指出的那样,但我只是进一步澄清:

let Headline = class Headline extends Component { }
Headline.Primary = class Primary extends Component { }

export {Headline as default}

// in another module:
import Headline from 'headline';

let headline = new Headline();
let primary = new Headline.Primary();

我认为您可能应该使用,因为ES6没有名称空间的概念。关于您的第二个代码段,您不会使用默认导出执行
*as
,对吗?没错。我已经复制并粘贴了这一行,但忘了编辑它。谢谢你,是的,这就是我要找的!我不知道您可以像
something.something=class扩展something.baseSomething{}
这样编写匿名类的方法在与
extends
结合使用时似乎失败了:(@ilwSignal真的吗?它应该可以工作,因为类表达式中的名称是可选的。@caw我真希望我在发表评论时花点时间详细说明和/或包括一把小提琴,因为我记不起具体细节。可能是引擎出了问题从我的评论开始,这也是我的猜测。可能是从那以后被修复的某个bug。它现在可以工作,而且规范似乎也允许这样做。您可以安全地将
class Primary
更改为just
class
,并使其成为匿名类表达式。(否则,该名称
Primary
(没有名称空间前缀)将在该类中除前缀名称外可用。)@caw否,命名的
表达式不会使标识符在其作用域中可用,这与命名的
函数
表达式不同。它只是使名称显式(在某些情况下,为构造函数提供其
.name
属性是必需的)@Bergi确实如此!函数和ES6类在这方面的行为完全相同。当您说它使名称“显式”时,您指的是该函数(和类)从ES6开始可以自动推断名称,这意味着函数(或类)表达式的名称通常是多余的表达式的名称可能与指定给它的变量或属性不同,在这种情况下,表达式的名称将在该表达式的作用域内可用。@caw哦,你说得对!我不知道,谢谢。