instanceof принимает строку как экземпляр моего класса Javascript - PullRequest
0 голосов
/ 23 сентября 2018

Оператор if ниже оценивается как true, когда type является строкой, и я не могу понять, почему.Это мой код:

const validateType = (instanceDescription, type) => {
    if (!type instanceof Type) {
        throw new Error(`type property of ${instanceDescription} is not 
                         a (child) instance of class Type`);
    }
}

Я не вижу проблемы в моем классе, потому что это действительно просто.Это выглядит так.

class Type {
    constructor(key, multipliers) {
        this.multipliers = multipliers;
        this.key = key;
    }
}

Что-то происходит с примером сравнения, о котором я не знаю, или я просто схожу с ума?Я обошел его, проверив, является ли определенное свойство неопределенным, каким оно будет для строки, но я бы предпочел перейти к более понятному варианту instanceof

1 Ответ

0 голосов
/ 24 сентября 2018

Скобки имеют значение здесь из-за приоритета оператора .! имеет более высокий приоритет, чем instanceof, поэтому без скобок ваш тест спрашивает, является ли false экземпляром Type:

class Type {
  constructor(key, multipliers) {
      this.multipliers = multipliers;
      this.key = key;
  }
}

let t = "somestring"

if (!(t instanceof Type)) { // << note the parenthesis
  console.log("error")
}
if (!t instanceof Type) {  // << never fires
  console.log("no error")
}
...