如何在ES6中获取类函数的引用?

Tra*_*Guy 8 javascript node.js ecmascript-6 es6-module-loader

对不起,如果问题太简单了,但我在这里遗漏了一些东西.刚刚切换了一个看起来像的ES5模块:

module.exports = {
  func1: function(a, b) {...},
  func2: function(a, b) {...}
};
Run Code Online (Sandbox Code Playgroud)

对于看起来像这样的ES6类:

export default class {
  func1(a, b) {...}
  func2(a, b) {...}
}
Run Code Online (Sandbox Code Playgroud)

一切都很好:在这两种情况下我都可以export mod from 'module';并且打电话mod.func1(a, b)mod.func2(a, b).

但是,我有一个函数可以调用模块函数来调用:

var caller = function(func, val1, val2) {
  let a = something(val1);
  let b = something(val2);
  return func(a, b);
};
Run Code Online (Sandbox Code Playgroud)

当我打电话时,caller(mod.func1, x, y)我得到了第一个实现所需的结果,但是undefined is not a function第二个实现了.

在两种情况下都打印出mod.func1返回值[Function],但显然从ES6类返回了其他内容.

我做错了什么,如何获得我可以在另一个函数中调用的类函数?

更新:使用第二个实现,我忘了添加实例化代码:

import Mod from 'module';
var mod = new Mod();
Run Code Online (Sandbox Code Playgroud)

Sea*_*ira 6

class MyClass {
  method(args) {}
}
Run Code Online (Sandbox Code Playgroud)

简而言之:

function MyClass() {}
MyClass.prototype.method = function(args){};
Run Code Online (Sandbox Code Playgroud)

您正在寻找的是static构造函数上的一个方法,它在ES {3,5}中以这种方式完成:

function MyClass() {}
MyClass.method = function(args){};
Run Code Online (Sandbox Code Playgroud)

在ES6中使用static修饰符完成:

export default class {
  static func1(a, b) { /* stuff */ }
  static func2(a, b) { /* stuff */ }
}
Run Code Online (Sandbox Code Playgroud)

但是,即使在对象中也可以使用简写方法,因此在一般情况下使用普通对象更加清晰:

export default {
  func1(a, b) {/* stuff */},
  func2(a, b) {/* stuff */}
}
Run Code Online (Sandbox Code Playgroud)

为什么构造函数上没有原型方法?

因为在ES3或ES5中不是这样的:

function MyClass() {};
MyClass.prototype.method = function(args) {};

MyClass.method  // undefined

var instance = new MyClass();
instance.method  // function(args) {}
Run Code Online (Sandbox Code Playgroud)

必须创建实例才能访问原型上的方法.