分享
三行代码  ›  专栏  ›  技术社区  ›  Laura

方法未定义

  •  0
  • Laura  · 技术社区  · 2 周前

    我目前正在学习OOJS,我正在开发一个简单的系统来实践知识。我要上课 Author ,一个班 AuthorDAO test . 在 作家岛 检查是否有其他相同的电子邮件注册和工作正常。但是,我的 const hasAuthor 当被召唤时 typeof 我得到: undefined 我不明白原因,因为不影响测试结果。为什么? hasAuthor 未定义 ? 它应该返回什么类型?

    类作者

    import { mailFormat, isEmpty, isNull } from "../validate.js";
    
    export default class Author {
      constructor(name, email) {
        this.setName(name);
        this.setEmail(email);
        this._date = new Date();
      }
    
      setName(name) {
        if (isEmpty(name) || isNull(name))
          throw new Error(`the field needs to be filled`);
        this._name = name;
      }
    
      setEmail(email) {
        if (isEmpty(email) || !email.match(mailFormat))
          throw new Error(
            `the field needs to be filled`
          );
        this._email = email;
      }
    
      get name() {
        return this._name;
      }
      get email() {
        return this._email;
      }
    }
    

    类AuthorDAO

    import Author from "../models/Author.js";
    
    export default class AuthorDAO {
      constructor() {
        this._list = [];
      }
    
      findEmail(email) {
        const author = this._list.find((author) => author.email === email);
        if (author instanceof Author) {
          return author;
        }
      }
    
      add(author) {
        const hasAuthor = this.findEmail(author.email);
        if (hasAuthor) throw new Error(`email already registered`);
    
        this._list.push(author);
        console.log(typeof hasAuthor === "undefined");//true
      }
    }
    

    import Author from "../models/Author.js";
    import AuthorDAO from "../dao/Author.js";
    
    try {
      const authorDAO = new AuthorDAO();
      const author1 = new Author("Jack", "jack55@gmail.com");
      const author2 = new Author("jack", "jack55@gmail.com");
      authorDAO.add(author1);
      authorDAO.add(author2);
      console.log(`saved ${author1.name} ${author1.email}`);
      console.log(`saved ${author2.name} ${author2.email}`);
    } catch (error) {
      console.log("Error " + error);
    }
    

    用我的方法 findEmail 情况需要 if 案例作者不是

    对不起,我的基本问题和我的英语差。

    1 回复  |  直到 2 周前
        1
  •  2
  •   Barmar    2 周前

    你得到了 undefined 因为 findEmail() return <something> ,它返回 未定义 默认情况下。如果你不想得到它,你必须归还其他东西。

      findEmail(email) {
        const author = this._list.find((author) => author.email === email);
        if (author instanceof Author) {
          return author;
        } else {
          return null;
        }
      }
    

    你可以回来 author Author 实例或 null

      findEmail(email) {
        return this._list.find((author) => author.email === email);
      }