如何在 ES6 类中声明公共函数?

Posted

技术标签:

【中文标题】如何在 ES6 类中声明公共函数?【英文标题】:How can I declare a public function in an ES6 class? 【发布时间】:2016-06-06 00:51:45 【问题描述】:

我正在尝试在 React ES6 类扩展的 React.Component 中添加一个公共函数。但是,我没有尝试使该功能对其他组件公开可用。

欢迎任何提示。

以下是我尝试过的一些示例:

import React,  PropTypes  from 'react'
import ChildComponent from './ChildComponent'

export class ArticleModal extends React.Component<void, Props, void> 
  static propTypes = 
  ;
  constructor (props) 
    super(props)
  
  static privateMethod () 
    // This doesn't work
  
  set privateMethod2 () 
    // This doesn't work either
  
  privateMethod3 () 
    // ...and neither does this.
  
  render () 
    return (
      <p>Some content</p>
    )
  

const mapStateToProps = (state) => (
)
export default connect((mapStateToProps), 
)(ArticleModal)

【问题讨论】:

你能看到正确的.render() 吗? 是的,它渲染得很好,只是当我尝试调用任何私有方法时,我得到了错误。 Uncaught TypeError: this._component.privateMethod is not a function 我绑定了this._component,看起来不错,我从 React 和 Redux 获取方法,我看到它是存储在 this._component 变量中的正确组件。 .privateMethod3 应该具有与.render 相同的“可达性”;我不明白只有一个是如何工作的...... 啊,现在我明白你的意思了。不,我看不到渲染方法,但组件确实渲染了。我认为它确实帮助我解决了这个问题。答案是从组件中访问“renderedElement”,在那里我找到了一个“类型”对象,该对象引用了具有可用方法的类。这确实感觉像是一个糟糕的解决方案,就像我只是访问类而不是实例一样。 你想达到什么目的? React 组件并非旨在将方法暴露给应用程序的其他部分;那不是他们的目的。只有组件本身应该调用它自己的方法。如果需要由另一个组件调用某些内容,则该函数将作为道具传递。但是不应该有“公共”方法的感觉。 【参考方案1】:

像这样修改你的构造函数

constructor (props) 
    super(props);
    this.privateMethod3 = this.privateMethod3.bind(this);

然后尝试调用 privateMethod3

【讨论】:

应该不需要,因为构造函数中的this 大概是正确的...... 不幸的是,这没有任何区别。我应该让我的问题更准确,并解释我已经尝试过了,抱歉。

以上是关于如何在 ES6 类中声明公共函数?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 A 类中声明为友元的函数必须在 B 类中定义为公共函数?

如何在 Kotlin 类中声明一个公共值 (val) 以便稍后对其进行初始化。在这种特殊情况下不能使用 var

在 C++ 中的类中初始化与公共和私有相同的函数:它是如何工作的?

如何使用箭头函数(公共类字段)作为类方法?

Python继承 - 如何禁用函数

在 ES6 中声明一个函数?