代码之家  ›  专栏  ›  技术社区  ›  Leff

使用static get未定义

  •  2
  • Leff  · 技术社区  · 7 年前

    我在学习JS课程,我试着看看 static get

    class Builder {
      constructor() {
        this.number = 1;
      }
    
      static get increaseNumber() {
        return 1 + this.number;
      }
    }
    
    const builderInstance = new Builder();
    

    但是,我明白了 undefined

    console.log(builderInstance.increaseNumber);
    

    如果我移除 static 如果成功了,为什么我会 如果我使用 静止的 ?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Orelsanpls    7 年前

    你没有定义是因为 increaseNumber Builder .

    static 是一个 keyword

    不能直接从对象调用静态方法。

    here 有教程解释吗

    class Builder {
      constructor() {
        this.number = 1;
      }
    
      static get increaseNumber() {
        return 1 + this.number;
      }
    }
    
    const builderInstance = new Builder();
    
    console.log(builderInstance.increaseNumber);

    以下是从对象调用的适当实现:

    对象表示 实例

    class Builder {
      constructor() {
        this.number = 1;
      }
    
      get increaseNumber() {
        return 1 + this.number;
      }
    }
    
    const builderInstance = new Builder();
    
    console.log(builderInstance.increaseNumber);

    正如您在评论中问我的,下面的代码片段返回 NaN 为什么?

    class Builder {
      constructor() {
        this.number = 1;
      }
    
      static get increaseNumber() {
        return 1 + this.number;
      }
    }
    
    console.log(Builder.increaseNumber);

    number ; 哪个是 undefined 1 + undefined 等于 .

    调用静态方法时,您没有执行 constructor

    您可以做什么:

    class Builder {
      static get increaseNumber() {
        // We use || here to say "if it's not initialized, initialize it to 0"
        this.number = (this.number || 0) + 1;
        
        return this.number;
      }
    }
    
    console.log(Builder.increaseNumber);
    console.log(Builder.increaseNumber);
    console.log(Builder.increaseNumber);
    console.log(Builder.increaseNumber);