ES6——Proxy实现链式操作

利用 Proxy,可以将读取属性的操作( get ),转变为执行某个函数,从而实现属性的链式操作。

var pipe = (function() {
    return function(value) {
        //         console.log(value)  // 4
        var funcStack = [];
        var oproxy = new Proxy({},{
            get: function(pipeObject, fnName) {
                if (fnName === 'get') {
                    return funcStack.reduce(function(val, fn) {
                        // console.log(fn);
                        return fn(val);
                    }, value);
                }
                funcStack.push(window[fnName]);
                //为什么可以通过window[fnName]调用。
                return oproxy;
            }
        });
        return oproxy;
    }
}());
console.log(pipe(4).double.pow.reverseInt.get); // 46

代码疑问:

为什么可以通过window[fnName]调用。
funcStack.push(window[fnName]);

把这个位置的代码换成

funcStack.push(window.fnName);//报错

会报错。

                        return fn(val);

提示fn不是一个function。

但是通常都是这样的啊?

var para = 1;
alert(window.para)//正确
alert(window[para])//报错
原文地址:https://www.cnblogs.com/sunupo/p/15495899.html