JavaScript动态格式化

时间:2017-07-29 18:45:51

标签: javascript jquery

我今天一直在使用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

有没有办法实现我在这里要做的事情?

2 个答案:

答案 0 :(得分:2)

@jhpratt指出错误是什么。

我只是想建议你不应该使用课程。从不。

此解决方案的代码噪音更少。可读,可维护

&#13;
&#13;
class D implements i {
    method1() {}
    method2() {}
}
class A extends x implements I {
    D d;
    method1() {
        d.method1();
    }
}
&#13;
&#13;
&#13;

更新

使用curry传递格式化程序

&#13;
&#13;
public Class MyClass
{
   public List<> list1;
   public List<> list2;
}
&#13;
&#13;
&#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");