我今天一直在使用JavaScript动态格式化,我似乎无法让它工作,并想知道是否有人在那里做了同样的事情。
这是我创建的函数,用于传递一定数量的格式化程序,例如字符串,数字等:
function Formatter(formatters) {
this.format = function(value, type) {
switch(type) {
case "string":
return value => formatters.string
break;
case "currency":
return value => formatters.curency
break;
case "number":
return value => formatters.number
break;
default:
return value;
break;
}
}
}
我在初始化中发送给它:
formatters: {
'string': input => input,
'number': input => input.toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, '$1,'),
'currency': input => input.toFixed(3),
'url': input => (`<a href="${input.url}">${input.title}</a>`)
}
...洙
var formatter = new Formatter({
'string': input => input,
'number': input => input.toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, '$1,'),
'currency': input => input.toFixed(3),
'url': input => (`<a href="${input.url}">${input.title}</a>`)
});
// This should display "test" as the format is just itself.
formatter.format("test", "string);
它实际显示的是 value =&gt; formatters.string
有没有办法实现我在这里要做的事情?
答案 0 :(得分:2)
@jhpratt指出错误是什么。
我只是想建议你不应该使用课程。从不。
此解决方案的代码噪音更少。可读,可维护
class D implements i {
method1() {}
method2() {}
}
class A extends x implements I {
D d;
method1() {
d.method1();
}
}
&#13;
更新
使用curry传递格式化程序
public Class MyClass
{
public List<> list1;
public List<> list2;
}
&#13;
答案 1 :(得分:1)
好的,基本上你正在做的是返回箭头函数本身,而不是被调用的值。您要做的是使用参数formatters.string
致电 value
。
function Formatter(formatters) {
this.format = function(value, type) {
switch(type) {
case "string":
return formatters.string(value);
break;
case "currency":
return formatters.curency(value);
break;
case "number":
return formatters.number(value);
break;
default:
return value;
break;
}
};
}
var formatter = new Formatter({
'string': input => input,
'number': input => input.toFixed(2).replace(/(\d)(?=(\d{3})+\.)/g, '$1,'),
'currency': input => input.toFixed(3),
'url': input => ('<a href="${input.url}">${input.title}</a>')
});
// This should display "test" as the format is just itself.
formatter.format("test", "string");