抱歉,问题太简单了,但是我在这里遗漏了一些东西。刚刚切换了一个ES5模块,如下所示:
module.exports = {
func1: function(a, b) {...},
func2: function(a, b) {...}
};
对于如下所示的ES6类:
export default class {
func1(a, b) {...}
func2(a, b) {...}
}
一切都很好:在两种情况下,我都可以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);
};
当我打电话给caller(mod.func1, x, y)
我时,第一个实现可以得到理想的结果,而第二个实现则可以得到理想的结果undefined is not a function
。
在两种情况下都打印出mod.func1
返回值[Function]
,但是显然从ES6类返回了其他内容。
我在做什么错,如何获得可以在另一个函数中调用的类函数?
更新:在第二种实现中,我忘记添加实例化代码:
import Mod from 'module';
var mod = new Mod();
class MyClass {
method(args) {}
}
是以下方面的简称:
function MyClass() {}
MyClass.prototype.method = function(args){};
您正在寻找的是static
构造函数上的方法,该方法在ES {3,5}中是通过以下方式完成的:
function MyClass() {}
MyClass.method = function(args){};
在ES6中是使用static
修饰符完成的:
export default class {
static func1(a, b) { /* stuff */ }
static func2(a, b) { /* stuff */ }
}
但是,即使在一个对象中也可以使用速记方法,因此在一般情况下使用普通对象更容易:
export default {
func1(a, b) {/* stuff */},
func2(a, b) {/* stuff */}
}
因为在ES3或ES5中不是这样:
function MyClass() {};
MyClass.prototype.method = function(args) {};
MyClass.method // undefined
var instance = new MyClass();
instance.method // function(args) {}
创建实例对于访问原型上的方法是必需的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句