[英]How to get a reference to a class function in ES6?
對不起,如果問題太簡單了,但我在這里遺漏了一些東西。 剛剛切換了一個看起來像的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
第二個實現undefined is not a function
。
在兩種情況下,打印出mod.func1
的值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) {}
必須創建實例才能訪問原型上的方法。
為什么要切換到class
構造(對於構造函數和使用這些方法的原型,它比語法糖更多一點)? 沒有理由不像以前那樣使用對象文字 - 你也可以在那里使用方法語法:
export default {
func1(a, b) {...},
func2(a, b) {...}
};
不是使用“靜態”方法導出對象,而是使用命名導出更合理:
export function func1(a, b) {...}
export function func2(a, b) {...}
如果你想使用mod
作為命名空間,你可以通過import * as mod from 'module'
mod
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.