《es6标准入门》chapter11中关于Proxy的一个错误例子的纠正

在原书第二版的p120,这里有一个使用Proxy实现管道化调用的例子,想法很好,但是代码有问题,下面是更正之后的代码。

由于我是在node环境下运行,所以我把几个全局函数定义到global内了,如果是在浏览器下测试,则可以保留原有这部分内容。

var pipe=(function(){
    var pipe;
    return function(value){
        pipe=[];
        return new Proxy({}, {
            get(target, fnName, receiver){
                console.log(‘enter get, fnName ‘ + fnName.toString())
                if(fnName == ‘get‘){
                    console.log(‘begin to calc the value‘);
                    return pipe.reduce(function(val, fn){
                        return fn(val);
                    }, value);
                }
                pipe.push(global[fnName]);
                console.log(pipe, pipe.length);
                console.log(target);
                //此处应该是要返回proxy对象,而不是原来的target对象
                return receiver;
            }
        });
    }
}());
//此处是为了兼容node环境而做的修改
global["double"] = n =>n*2;
global["pow"] = n =>n*n;
global["reverseInt"] = n=>n.toString().split(‘‘).reverse().join(‘‘) | 0;
console.log(pipe(3).double.pow.reverseInt.get)
时间: 2024-10-23 15:41:52

《es6标准入门》chapter11中关于Proxy的一个错误例子的纠正的相关文章

ES6标准入门 论文随笔(二)

一.基本信息 标题:ES6标准入门 时间:2015 来源:电子工业出版社 关键词:ES6标准入门 二.研究内容 问题定义: ES6是什么?它是用来干嘛的?为什么要用ES6? 特点:(1)JavaScript新特性 (2)let.const (3)promise (4)iterator (5)proxy 三.结论 <ES6标准入门(第2版)>为中级难度,适合对 JavaScript 语言或 ES5 已经有所了解的读者,用来提高水平,了解这门语言的最新发展:也可当作参考手册,查寻 ES6/ES7

ES6标准入门(阮一峰)-阅读记录与心得

目标:学习ES6标准,并能灵活使用ES6标准的JavaScript 内容:(未完成,待继续) 第一阶段:准备阶段 1.第一章,入门准备.主要讲了ES6简介与ECMAScript历史(这部分快速阅读),重点掌握ES6环境具体部署,建议使用Babel转码器.在配置Babel转码器之前,需要下载安装node环境,可以适当理解包管理的概念. 第二阶段:基础:新特性 1.第二章, 原文地址:https://www.cnblogs.com/xinkuiwu/p/11551679.html

《ES6标准入门》(阮一峰)--15.Reflect

1.概述 Reflect对象与Proxy对象一样,也是 ES6 为了操作对象而提供的新 API.Reflect对象的设计目的有这样几个. (1) 将Object对象的一些明显属于语言内部的方法(比如Object.defineProperty),放到Reflect对象上.现阶段,某些方法同时在Object和Reflect对象上部署,未来的新方法将只部署在Reflect对象上.也就是说,从Reflect对象上可以拿到语言内部的方法. (2) 修改某些Object方法的返回结果,让其变得更合理.比如,

ES6 标准入门

1.let所声明的变量只在let命令所在的代码块有效 2.不存在变量提升 在代码块内,使用let命令声明变量之前,该变量都是不可用的,称为暂时性死区. 3.不允许重复声明 let 不允许在相同作用域内重复声明一个变量 4.块级作用域 没有块级作用域的不合理的场景 ar temp = new Date(); function f() { console.log(temp); if(true)// true或false结果一样 { var temp = "hello" } } f() //

1.《ES6标准入门》(阮一峰)--3.变量的解构赋值

1.数组的解构赋值 基本用法 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring). 以前,为变量赋值,只能直接指定值. let a = 1; let b = 2; let c = 3; ES6 允许写成下面这样. let [a, b, c] = [1, 2, 3]; 上面代码表示,可以从数组中提取值,按照对应位置,对变量赋值. 本质上,这种写法属于"模式匹配",只要等号两边的模式相同,左边的变量就会被赋予对应的值.下面是一些使用嵌

【学习笔记】ES6标准入门

这里简要记录一下对自己感触比较深的几个知识点,将核心的应用投放于实际的项目之中,提供代码的可维护性. 一.let和const { // let声明的变量只在let命令所在的代码块内有效 let a = 1; var b = 2; } console.log(a); // 报错: ReferenceError: a is not defined console.log(b); // for循环的技术器就很适合let命令 for (let i = 0; i < 3; i++) { console.l

ES6标准入门 第一章:简介

ECMAScript 6 是JavaScript 语言的下一代标准:发布于2015年,又称为ECMAScript 2015. ECMAScript 方言还有 JScript 和 ActionScript. ECMAScript 与 JavaScript 的关系:前者是后者的规范,后者是前者的一种实现. 一个完整的JavaScript实现 包含 ECMAScript .DOM. BOM 三部分. babel 转码器: Babel 是一个广为使用的ES6转码器,可以将ES6代码转为ES5代码,从而在

《ES6标准入门》29~48Page 字符串拓展 正则拓展

1.字符串的拓展 ES3允许使用类似\u0061这样的形式来表示字符,其中的数字是Unicode-8编码. 但如果超出\uffff的字符,必须使用双字节的形式表达,例如 \uD842\uDFB7. 在ES6中,可以用\u{20BB7}这种形式表示,其中数字是Unicode-16编码. 对于需要Unicode-16编码存储的字符,ES认为有2个字符.此时使用String.codePoinAt()方法,可以准确的识别字符串中的字符,如果需要遍历,则需要使用for...of循环. 与此相对,Strin

《ES6标准入门》10~28Page let和const命令 变量的解构赋值

1.let和const命令 (1)let命令 let命令类似于ES3中的var命令,但是所声明的变量只在let所在的代码块内有效. 1 { 2 let a = 10; 3 var b = 1; 4 } 5 6 console.log(a); //报错 7 console.log(b); //1 let相较var来讲有三个特殊性质,分别是不存在变量提升.暂时性死区和不允许重复声明. 1 //不存在变量提升 2 console.log(a); //报错 3 let a = 1; 4 5 //你无法在