Javascript:具有所有方法调用的单个处理程序的对象

时间:2017-03-26 18:45:40

标签: javascript node.js

这就是我所说的。

Algebra.twoplustwo() //4
Algebra.fourtimesnine() //36

当调用Algebra中的函数时,该对象具有一个处理程序,该处理程序解析调用的函数的名称以确定要执行的操作。

这可能吗?如果没有找到函数,对象是否具有默认函数?

1 个答案:

答案 0 :(得分:1)

是的,可以在空对象上使用ES6 Proxy

var Algebra = new Proxy({}, {
    // Intercept member access:
    get: function(target, name) {
        // Helper function to translate word to number
        // -- extend it to cover for more words:
        function toNumber(name) {
            var pos = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"].indexOf(name);
            return pos === -1 ? NaN : pos;
        }
        // See if we can understand the name:
        var parts = name.split('plus');
        if (parts.length > 1) {
            parts = parts.map(toNumber);
            // Return result as a function:
            return _ => parts[0] + parts[1];
        }
        var parts = name.split('times');
        if (parts.length > 1) {
            parts = parts.map(toNumber);
            // Return result as a function:
            return _ => parts[0] * parts[1];
        }
    }
});

// Sample calls:
console.log(Algebra.twoplustwo());
console.log(Algebra.fourtimesnine());

正如您所看到的,实际上并不需要将这些名称称为方法,您可以将它们解释为属性:

而不是返回一个函数:

            return _ => parts[0] * parts[1];

...你可以返回结果:

            return parts[0] * parts[1];

然后您将其作为属性访问:

Algebra.threetimesfour