在ES6类中声明变量。

时间:2018-09-09 12:32:59

标签: javascript

我想了解如何在类中声明变量?

例如,到目前为止,我一直在这样声明它

let displaySearchCrypto = []
let updateCoinData = [];

class cryptoTicker extends PureComponent {

并在全班使用它(我的意思是在我的班级内部这样)

componentDidUpdate() {
 updateCoinData = [...this.props.cryptoLoaded]; 

        if (updateCoinData[i]["short"] == tradeMsg.coin ) {


        //Search for changed Crypto Value
        updateCoinData[i]["long"] = tradeMsg["message"]["msg"]["long"]
        updateCoinData["short"] = tradeMsg["message"]["msg"]["short"]

 search = () => {
 displaySearchCrypto.push({
                no: {i},
                key: this.props.cryptoLoaded[i]["long"],
                short: this.props.cryptoLoaded[i]["short"],
                long: this.props.cryptoLoaded[i]["long"],
                price: this.props.cryptoLoaded[i]["price"],
                mktcap: this.props.cryptoLoaded[i]["mktcap"],
                perc: this.props.cryptoLoaded[i]["perc"],
                vwapData: this.props.cryptoLoaded[i]["vwapData"] 
               })

但是,由于我将只在单个类中使用,所以我认为我不应该在全局范围类中声明。所以我的问题是,如何在类中声明变量?

2 个答案:

答案 0 :(得分:3)

您不要在类内声明变量。您可以在构造函数或方法中声明变量,或者创建实例的 properties (或类本身,即“静态”属性,这些属性是构造函数的特性)。

如果您正在使用模块,则您的第一个代码块将不会创建全局变量,而是会创建模块全局变量(仅对于该模块中的代码而言是全局变量)。如果该模块仅包含该类,并且您要表示该类的所有实例共享的变量和数组,则可以继续这样做。

但是我怀疑您希望它们是实例的属性,而不是在实例之间共享,在这种情况下,您需要在构造函数中定义这些属性:

constructor(props) {
    super(props);
    this.displaySearchCrypto = [];
    this.updateCoinData = [...this.props.cryptoLoaded];
}

然后通过引用实例来使用它们(通常通过this.)。

答案 1 :(得分:0)

是的,我认为T.J Crowder对此非常满意。但是,我想添加以下内容:

对象和类的任务是提供某些实体的抽象。对于ReactJS,这些对象是React组件。将与某个组件相关的所有数据放入一个对象的优点是:

  • 对象内部的所有内容都会自动命名,这有助于防止潜在的命名冲突
  • 我们可以在对象内部隐藏一些实现细节。然后在另一个不必担心如何实现某些方法的地方使用该对象,我们只需要知道如何与之交互即可。

还请记住:

课程包括:

  • 除了与对象关联的属性外,没有其他变量。
  • 除与对象关联的方法外,没有其他功能。

此外,重要的是要知道JS使用原型继承class关键字仅仅是基于顶级原型继承的语法糖。