Javascript 类的属性的名称是什么?

Javascript 类的属性的名称是什么?,javascript,class,reactjs,ecmascript-6,Javascript,Class,Reactjs,Ecmascript 6,我正在浏览React文档,发现了这段代码 import PropTypes from 'prop-types'; class Greeting extends React.Component { render() { return ( <h1>Hello, {this.props.name}</h1> ); } } Greeting.propTypes = { name: PropTypes.string }; 他们在这里所做

我正在浏览React文档,发现了这段代码

import PropTypes from 'prop-types';

class Greeting extends React.Component {
  render() {
    return (
      <h1>Hello, {this.props.name}</h1>
    );
  }
}

Greeting.propTypes = {
  name: PropTypes.string
};
他们在这里所做的事情是否有一个特定的名称,在这里他们在类上创建一个propTypes对象

这只是一种反应,还是可以在任何ES6代码中实现


为什么我们不能在类本身中设置一个propTypes变量,为什么它必须在类之外?

你声明/定义一个类,然后实例化某个类的对象。

你声明/定义一个类,然后实例化某个类的对象。

这是因为propTypes是类的static1属性,不与类的某个实例关联,而是与类本身关联。React的prop类型检查将特定组件的PropType作为组件类的静态属性进行查找。它不在类的原型上,而是在类本身上

如果要在类中声明它,它将是一个实例属性:

class Greeting extends React.Component {
  get propTypes() { //Not static!
    ...
  }

  render() {
    return (
      <h1>Hello, {this.props.name}</h1>
    );
  }
}  
它不在课堂上的原因是基于偏好。静态属性和getter可以在ES2015或ES6代码中的任何位置使用

在ECMAScript的未来版本中,您可以声明类属性。您现在可以在预设中使用类属性和插件:

这是一种语法糖,其工作原理与充当类的静态属性的静态getter完全相同

1静态意味着不变,因为属性不会根据实例而更改,所以在所有实例中都是相同的,因为它不与一个instance关联。

这是因为propTypes是类的static1属性,与类的某个实例无关,而与类本身相关。React的prop类型检查将特定组件的PropType作为组件类的静态属性进行查找。它不在类的原型上,而是在类本身上

如果要在类中声明它,它将是一个实例属性:

class Greeting extends React.Component {
  get propTypes() { //Not static!
    ...
  }

  render() {
    return (
      <h1>Hello, {this.props.name}</h1>
    );
  }
}  
它不在课堂上的原因是基于偏好。静态属性和getter可以在ES2015或ES6代码中的任何位置使用

在ECMAScript的未来版本中,您可以声明类属性。您现在可以在预设中使用类属性和插件:

这是一种语法糖,其工作原理与充当类的静态属性的静态getter完全相同

1静态含义不变,因为属性不会根据实例更改,所以在所有实例中都是相同的,因为它不与一个指令关联。

是一个特定于React的API。这是一种让React对传递给组件的属性执行基本运行时类型检查的方法。在您的示例中,您是说问候语组件可以采用string类型的name属性,但这不是必需的

这个特殊的propTypes属性的定义方式并不特定于React,不过,它只是一个ES6静态类属性。它是与类声明本身Greeting.propTypes关联的属性,而不是未定义的类new Greeting.propTypes的实例。实际上,您可以使用一个等效的:

class Greeting extends React.Component {
  static propTypes = {
    name: PropTypes.string
  };
  render() { }
}
console.log(Greeting.propTypes) // { name: ... }
是一个特定于React的API。这是一种让React对传递给组件的属性执行基本运行时类型检查的方法。在您的示例中,您是说问候语组件可以采用string类型的name属性,但这不是必需的

这个特殊的propTypes属性的定义方式并不特定于React,不过,它只是一个ES6静态类属性。它是与类声明本身Greeting.propTypes关联的属性,而不是未定义的类new Greeting.propTypes的实例。实际上,您可以使用一个等效的:

class Greeting extends React.Component {
  static propTypes = {
    name: PropTypes.string
  };
  render() { }
}
console.log(Greeting.propTypes) // { name: ... }

与我们如何声明静态方法类似,是否可以在类中声明静态属性,无论是现在还是将来的ECMAScript实现中?ECMAScript 2016+或ES7+由于此功能不是ES2016和ES2017的一部分,我们应该避免提及任何实验功能的规范版本。我认为这比帮助更令人困惑。与我们如何声明静态方法类似,是否可以在类中声明静态属性,无论是现在还是将来ECMAScript?ECMAScript 2016+或ES7+的实现中,由于此功能既不是ES2016和ES2017的一部分,我们应该避免提及任何实验功能的规范版本。我认为这比帮助更让人困惑。我原以为ES7就是这样,但当我尝试这样做时,控制台中出现了一个错误,指出等号是意外标记,即使我的预设设置为最新。我是否需要不同于最新版本的预设来编译ES7?编辑:刚刚看到上面我需要转换类属性插件。你是在用Babel和插件吗?@THughes是的,我想它实际上不是ES7规范的一部分,它是一个超出这个范围的规范。我个人使用的是TypeScript,它已经建成了
有一段时间,是的,这是一个实验性的特征。它还不是任何规范的一部分。在我看来,提到ES7+只会让人感到困惑。我原以为ES7就是这样,但当我尝试这么做时,控制台中出现了一个错误,指出等号是一个意外标记,即使我的预设设置为最新。我是否需要不同于最新版本的预设来编译ES7?编辑:刚刚看到上面我需要转换类属性插件。你是在用Babel和插件吗?@THughes是的,我想它实际上不是ES7规范的一部分,它是一个超出这个范围的规范。我个人使用的TypeScript内置了一段时间。是的,这是一个实验性的特性。它还不是任何规范的一部分。提到ES7+只会让人感到困惑。