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])//报错