javascript - Javascript 类属性 - 如何将函数作为值分配给它们?
问题描述
在我的 javascript 代码中,我有一个用于格式化对象的辅助类:
class MyHelperClass() {
get MyStylerFunction() {
return function(value, index) {
return "/*some css based on value and index*/";
};
}
get MyFormatterFunction() {
// similar pattern to MyStylerFunction
}
}
然后,此代码由以下人员使用:
myObj.table({
title: ...,
columns: ...,
cssfunction: MyHelperClass.MyStylerFunction
});
此代码不起作用,并且在控制台上没有给出错误消息。由于我无法控制 table() 函数,我假设当给定的 css getter 函数不适用时它会优雅地失败。但是,当我使用这个时:
// inside MyHelperClass
MyStylerFunction(value, index) {
return "/*some css based on value and index*/";
}
// in function table()
...
cssfunction: MyHelperClass.prototype.MyStylerFunction
...
它按预期工作。如果我将 styler 函数放在类之外并且只是将函数的名称提供给 table(),它也可以工作:
// in global namespace
function myStylerFunction(value, index) {
// you know the drill by now
}
// inside table()
...
cssfunction: myStylerFunction
...
问题是
- 我不想用垃圾填充全局命名空间
- 使用原型感觉很笨拙,所以我想尽可能避免这种情况
有没有办法在保持MyHelperClass.MyStylerFunction
语法的同时实现我的目标table()
?
我不知道是什么导致了这个问题,谷歌搜索没有返回任何关于如何从类属性获取器中正确返回函数值的结果。
解决方案
你追求的是static
方法。静态方法不需要调用类的实例,而是可以在类本身上访问它们。这可用于实用功能,您可以将其打包到帮助类中,例如您的MyHelperClass
. 您还可以使用静态 getter,它允许您在访问静态方法时运行代码。
class MyHelperClass {
static get MyStylerFunction() {
return function(value, index) {
return "/*some css based on value and index*/";
};
}
static get MyFormatterFunction() {
// similar pattern to MyStylerFunction
}
}
这将允许您执行以下操作:
myObj.table({
title: ...,
columns: ...,
cssfunction: MyHelperClass.MyStylerFunction
});
照MyStylerFunction
原样static
,您可以将其作为类本身的属性进行访问。此外,由于它是一个 getter ( get
),因此您不需要像普通函数/方法那样调用它,而是会自动调用它,并返回您指定要返回的函数。
推荐阅读
- c - 操作系统开发:设置 idt 后的一般保护故障问题
- php - 防止 PHP/Redis Session D/DoS 攻击
- r - 需要帮助在 R studio 中进行随机排列
- dask - 如何使用 dask_ml 运行 PCA。我收到错误消息,“此函数 (tsqr) 在高瘦矩阵的情况下支持 QR 分解”?
- swift - 访问类实例外部的泛型类类型
- python - x轴上重叠字符串的解决方案需要很长时间才能绘制
- android - Android 上受信任的 Web 活动不隐藏 URL 栏
- r - 将日期添加到向量的第一个元素以获取新日期,然后添加下一个元素以生成新日期,依此类推
- java - Java - 双链表实现
- mediawiki - 使用 css/html 下拉菜单作为 Mediawiki 模板