【问题标题】:Method from imported class undefined来自导入类的方法未定义
【发布时间】:2017-04-19 01:17:00
【问题描述】:

我正在尝试将第三方 API 集成到我的 meteor.js 应用程序中。 所以想法是,当在/blog 路由上时,应用程序应该调用外部类的方法。

router.js:

import blog from '../imports/scripts/blog';
FlowRouter('/blog', {
  name: 'blog',
  action: function(params) {
    blog.init(); // here I get the error "init is not a function" (it's undefined)
  }
});

blog.js:

export default class Blog {
  constructor(){
    ...
  }

  init() {
    console.log('init blog api');
    ...
  }
}

我正在使用最新的流星 (1.4.2.3) 和以下 npm 包来启用 ES2015:

"babel-cli": "^6.18.0",
"babel-core": "^6.18.2",
"babel-loader": "^6.2.8",
"babel-preset-es2015": "^6.18.0",
"babel-runtime": "^6.18.0",
"meteor-node-stubs": "^0.2.4",
"webpack": "^1.13.3"

我是否在我的设置中遗漏了我无法调用 blog.init() 的任何内容?

【问题讨论】:

  • 你需要做 var blog = new Blog(); 然后你就会有 init - blog.init()
  • 您正在导出一个类,而不是它的一个实例。你应该先import Blog from '../imports/scripts/blog'; 然后const blog = new Blog();

标签: javascript meteor ecmascript-6


【解决方案1】:

我认为您尝试导入类(不是类实例)。因此你不能调用方法。

将你的 blog.js 更改为:

class Blog {
  constructor(){
    ...
  }

  init() {
    console.log('init blog api');
    ...
  }
}
export default new Blog();

【讨论】:

    【解决方案2】:

    Yan Mayatskiy 和 Gothdo 在他们的 cmets 中回答了这个问题,谢谢。 如果有人正在寻找正确答案:

    我需要实例化我导入的类,像这样:

    import Blog from 'blog';
    const blog = new Blog();
    blog.init();
    

    【讨论】:

      【解决方案3】:

      如果你想导出一个类,你需要在之后实例化它,除非是一个带有一些静态方法的类。

      假设这是一个只有静态方法的“帮助”类。

      export class Logger {
          static info(message) {
              console.log(`Info: ${message}`);
          }
      
          static error(message) {
              console.log(`Error: ${message}`);
          }
      }
      
      export default Logger;
      

      所以你可以直接导入并使用它。

      import Logger from "../../../../utils/Logger";
      ...
      Logger.Info("...");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-13
        • 1970-01-01
        • 2022-12-03
        • 2011-04-23
        • 2021-12-24
        • 1970-01-01
        相关资源
        最近更新 更多