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

为什么我班上的“口渴”法不起作用?

  •  0
  • kevin  · 技术社区  · 7 年前

      class Vampire {
            constructor(name, pet) {
                this.name = name;
                if (pet === undefined) {
                    this.pet = 'bat';
                } else {
                    this.pet = pet;
                }
            }
            thirsty() {
                return true
            };
        }
    

    它没有通过这个测试:

      it('should have vampire return true if thirsty', function() {
        var vampire = new Vampire('Andy');
        assert.equal(vampire.thirsty, true);
      });
    
    
    3 回复  |  直到 7 年前
        1
  •  1
  •   Blue    7 年前

    只要创建类的新实例,它就可以正常工作:

    class Vampire {
        constructor(name, pet) {
            this.name = name;
            if (pet === undefined) {
                this.pet = 'bat';
            } else {
                this.pet = pet;
            }
        }
        thirsty() {
            return true
        };
    }
    
    var pet = new Vampire('boo');
    
    console.log(pet.thirsty());

    也许你是想像这样接近它 Vampire.thirsty() ? 如果是这样的话,你应该做一个 static method :

    class Vampire {
        constructor(name, pet) {
            this.name = name;
            if (pet === undefined) {
                this.pet = 'bat';
            } else {
                this.pet = pet;
            }
        }
        static thirsty() {
            return true
        };
    }
    
    console.log(Vampire.thirsty());

    编辑: thirsty ,而不是 thirsty() . 渴的 :

    it('should have vampire return true if thirsty', function() {
      var vampire = new Vampire('Andy');
      assert.equal(vampire.thirsty(), true);
    });
    
        2
  •  1
  •   Nick Parsons Felix Kling    7 年前

    你不能打电话 Vampire.thirsty 像这样是因为 thirsty 这不是一个 静止的 class ,或申报 静止的 :

    静止的

    class Vampire {
      constructor(name, pet) {
        this.name = name;
        if (pet === undefined) {
          this.pet = 'bat';
        } else {
          this.pet = pet;
        }
      }
      static thirsty() { // declare as static
        return true
      };
    }
    
    console.log(Vampire.thirsty());

    方法(使用圆括号调用方法本身: thirsty() ):

    class Vampire {
      constructor(name, pet) {
        this.name = name;
        if (pet === undefined) {
          this.pet = 'bat';
        } else {
          this.pet = pet;
        }
      }
      thirsty() { // declare as static
        return true
      };
    }
    
    let vlad = new Vampire("Vlad", "dog"); // create an instance of the class Vampire (an object)
    console.log(vlad.thirsty()); // call the thirsy method on the object (ensure you use the round brackets ())
        3
  •  0
  •   ThisIsNoZaku    7 年前

    在测试中,您错误地比较了函数 thirsty true .

    assert.equal(vampire.thirsty, true);

    渴的 并检查返回值。

    您需要像这样调用该方法:

    assert.equal(vampire.thirsty(), true);