【es6】class】的更多相关文章

代理(Proxy)可以拦截并改变 JS 引擎的底层操作,如数据读取.属性定义.函数构造等一系列操作.ES6 通过对这些底层内置对象的代理陷阱和反射函数,让开发者能进一步接近 JS 引擎的能力. 一.代理与反射的基本概念 什么是代理和反射呢?代理是用来替代另一个对象(target),JS 通过new Proxy()创建一个目标对象的代理,该代理与该目标对象表面上可以被当作同一个对象来对待. 当目标对象上的进行一些特定的底层操作时,代理允许你拦截这些操作并且覆写它,而这原本只是 JS 引擎的内部能力…
和其它面向对象编程语言一样,ES6 正式定义了 class 类以及 extend 继承语法糖,并且支持静态.派生.抽象.迭代.单例等,而且根据 ES6 的新特性衍生出很多有趣的用法. 一.类的基本定义 基本所有面向对象的语言都支持类的封装与继承,那什么是类? 类是面向对象程序设计的基础,包含数据封装.数据操作以及传递消息的函数.类的实例称为对象. ES5 之前通过函数来模拟类的实现如下: // 构造函数 function Person(name) { this.name = name; } //…
ES6 新的数组方法.集合.for-of 循环.展开运算符(...)甚至异步编程都依赖于迭代器(Iterator )实现.本文会详解 ES6 的迭代器与生成器,并进一步挖掘可迭代对象的内部原理与使用方法 一.迭代器的原理 在编程语言中处理数组或集合时,使用循环语句必须要初始化一个变量记录迭代位置,而程序化地使用迭代器可以简化这种数据操作 如何设计一个迭代器呢? 迭代器的本身是一个对象,这个对象有 next( ) 方法返回结果对象,这个结果对象有下一个返回值 value.迭代完成布尔值 done,…
1.扩展运算符[三个点(...)将一个数组转为用逗号分隔的参数序列] 作用:用于函数调用 function add(x, y) { return x + y; } const numbers = [2, 6]; add(...numbers) // 8 8 2....作用[求最大值/拼接数组/复制数组(a2复制a1,改a2不改变a1)/合并数组/将字符串转化为真正的数组] 求最大值 拼接数组 复制数组(a2复制a1,改a2不改变a1) 合并数组 将字符串转化为真正的数组 (1)最大值 Math.…
1.函数参数默认值[详情例子参照ESMAScript 6入门 (阮一峰)] 允许为函数的参数设置默认值,即直接写在参数定义的后面.[例子1] 参数变量是默认声明的,所以不能用let或const再次声明.[例子2] 参数默认值不是传值的,而是每次都重新计算默认值表达式的值.(惰性求值)[例子3] 2.函数的length属性 指定了默认值后,length属性将失真.[因为length属性的含义是,该函数预期传入的参数个数.] 3.rest参数[...变量名],用于获取函数的多余参数 注意:rest…
1.Number.isFinite()和Number.isNaN()[只对数值有效] (1)Number.isFinite()用来检查一个数值是否为有限的(finite),即不是Infinity. [参数类型不是数值,Number.isFinite一律返回false.] (2)Number.isNaN()用来检查一个值是否为NaN. [参数类型不是NaN,Number.isNaN一律返回false.] 2.Number.parseInt()和 Number.parseFloat() [用法与之前…
一.概念 首先我们要理解Generator和Promise的概念. Generator:意思是生成器,可以在函数内部通过yeild来控制语句的执行或暂停状态. *Foo(){ yeild console.log('step1'); yeild console.log('step2'); } run(foo){ var step = foo(); while(!step.done){ step.next(); } } run(Foo); // step1 // step2 通过上面这个例子可以看到…
node编程中最重要的思想就是模块化,import和require都是被模块化所使用. 遵循规范 require 是 AMD规范引入方式 import是es6的一个语法标准,如果要兼容浏览器的话必须转化成es5的语法 调用时间 require是运行时调用,所以require理论上可以运用在代码的任何地方 import是编译时调用,所以必须放在文件开头 本质 require是赋值过程,其实require的结果就是对象.数字.字符串.函数等,再把require的结果赋值给某个变量 import是解构…
函数默认值问题 在ES6之前,不能直接为函数指定默认值,但是ES6允许为函数的参数设置默认值 之前实现方式 function log(x, y) { y = y || 'World'; console.log(x, y); } log('Hello') // Hello World log('Hello', 'China') // Hello China log('Hello', '') // Hello World 解析:缺点在于如果给参数y赋值了,但是对应的布尔值是false,则会出现最后一…
let命令 为es6新增命令,用来声明变量,类似于var,但是let所声明的变量,只在let命令所在的块级作用域内有效 块级作用域写法(ES6块级作用域允许任意嵌套): // 块级作用域写法 { let tmp = ...; ... } 块级作用域例1 for (let i = 0; i < 10; i++) { // ... } console.log(i);//ReferenceError: i is not defined 解析:上面代码中,i的作用域是for循环体内,在循环体外引用就会报…