ES6的新增特性

Posted xue-shuai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES6的新增特性相关的知识,希望对你有一定的参考价值。

目录

第一篇、开发环境搭建

 第二篇、三种声明方式

2.1 var(全局声明)

2.2 let(局部声明)

2.3 const(常量声明)

第三篇、解构赋值

3.1 数组的解构赋值

3.2 对象的解构赋值

3.3 字符串的解构赋值

第四篇、对象扩展运算符和rest运算符

4.1 对象扩展运算符

4.2 rest运算符

第五篇、新增字符串

5.1 字符串模板

5.2 字符串查找

5.3 字符串的复制

第六篇、数字的操作

6.1 数字判断

第七篇、数组方法

7.1 Array.from()

7.2 Array.of()

7.3 find()实例方法

7.4  fill()实例方法

7.5 entries()实例方法

7.6 数组循环

7.6.1 for...of

第八篇、函数扩展和箭头函数

 第八篇、函数和数组的查缺补漏

 8.1 对象的函数解构

 8.2 数组解构

 8.3 in的用法

 8.4 数组遍历

8.5 数组转为字符串

第九篇、ES6中的对象

9.1 对象的赋值

9.2 key值的构建

9.3 自定义对象

9.3.1 is()

9.3.2 assign()

第十篇、Symbol在对象中的作用

10.1 认识Symbol

10.2 Symbol在对象中的应用

第十一篇、Set和WeakSet数据结构

11.1 Set的增删查

 11.2 Set的输出

11.3 WeakSet的声明

11.4  WeakSet重复值的问题

 第十二篇、map的数据结构

12.1 初始map

12.2 map的增删查

第十三篇、proxy

第十四篇、promise

第十五篇、class

 15.1 类方法的传参

 15.2 类的传参

15.3 类的继承

第十六篇、模块化操作

 16.1 多变量输出

16.2 函数化输出

16.3 语义化输出


第一篇、开发环境搭建

ES6跟我们的ES5不一样,因为很多浏览器可能不支持ES6的语法,所以需要通过转码将ES6的语法转为ES5的语法,来使得大部分浏览器可以识别

  1. //根目录下初始化npm生成package.json
  2. npm init -y
  3. {
  4. "name": "ES6",
  5. "version": "1.0.0",
  6. "description": "",
  7. "main": "index.js",
  8. "scripts": {
  9. "test": "echo "Error: no test specified" && exit 1"
  10. },
  11. "keywords": [],
  12. "author": "",
  13. "license": "ISC"
  14. }
  15. //全局安装babel-cli
  16. npm install -g babel-cli
  17. //安装babel-preset-es2015和babel-cli
  18. npm install --save-dev babel-preset-es2015 babel-cli
  19. //安装完成之后在package.json下会多出来如下代码
  20. "devDependencies": {
  21. "babel-cli": "^6.26.0",
  22. "babel-preset-es2015": "^6.24.1"
  23. }
  24. //在根目录下需要建一个.babelrc文件,文件中写入如下代码
  25. {
  26. "presets":[
  27. "es2015"
  28. ],
  29. "plugins":[]
  30. }
  31. //最后执行如下命令
  32. //将src/index.js文件转为ES5的语法,转完之后的文件在dist/index.js
  33. babel src/index.js -o dist/index.js

 目录结构如下:

技术图片

html文件中引入的js需要引入的是dist下的index.js

  1. ----------------------------转码前---------------------
  2. >src/index.js
  3. let a=1;
  4. console.log(a)
  5. ----------------------------转码后---------------------
  6. >dist/index.js
  7. "use strict";
  8. var a = 1;
  9. console.log(a);
  1. //每次都要手动输入很长的命令才可以转码,我们要简化一下
  2. > 修改package.json的script里的内容如下
  3. "scripts": {
  4. "build": "babel src/index.js -o dist/index.js"
  5. },
  6. //这样我们每次执行npm run build就可以打包执行代码

 第二篇、三种声明方式

2.1 var(全局声明)

  1. //var是全局声明变量
  2. var a = "Hamy";
  3. console.log(a) //Hamy
  4. window.onload = function(){
  5. console.log(a) //哈米
  6. }
  7. {
  8. var a = "哈米";
  9. }
  10. console.log(a) //哈米
  11. //在块中再次声明该变量,会覆盖全局声明的变量

2.2 let(局部声明)

  1. //let 局部声明
  2. {
  3. let a="哈米"
  4. }
  5. console.log(a); //报错,因为a是在{}中局部声明,在全局中获取不到
  6. for(var i=0;i<10;i++){
  7. console.log("循环体中:"+i) //1 2 3 4 5 6 7 8 9
  8. }
  9. console.log("循环体外:"+i) //10
  10. for(let i=0;i<10;i++){
  11. console.log("循环体中:"+i) //1 2 3 4 5 6 7 8 9
  12. }
  13. console.log("循环体外:"+i) //报错,因为i是局部变量,全局中找不到i

2.3 const(常量声明)

  1. const a = "Hami";
  2. var a = "哈米";
  3. console.log(a); //报错,常量声明完成之后不能被修改,否则报错

第三篇、解构赋值

3.1 数组的解构赋值

  1. //数组的解构赋值要一一对应,否则报错
  2. let [a,b,c] = [0,1,2]
  3. console.log(a,b,c) //0 1 2
  4. let [a,[b,c],d] = [0,1,2]
  5. console.log(a,b,c) //报错
  6. let [a,[b,c],d] = [0,[1,2],3]
  7. console.log(a,b,c,d) //0 1 2 3
  8. let [foo=‘true‘] = []
  9. console.log(foo) //true 可以使用默认值
  10. let [a,b=‘哈米‘] = [‘hamy‘]
  11. console.log(a+b) //hamy哈米
  12. let [a,b=‘哈米‘] = [‘hamy‘,undefined]
  13. console.log(a+b) //hamy哈米 undefined是空
  14. let [a,b=‘哈米‘] = [‘hamy‘,null]
  15. console.log(a+b) //hamynull null是有值,值为null

3.2 对象的解构赋值

  1. //对象的解构赋值是通过key值来取的
  2. let {foo,bar} = {foo:‘Hamy‘,bar:‘哈米‘}
  3. console.log(foo+bar) //Hamy哈米
  4. let {foo,boo} = {foo:‘Hamy‘,bar:‘哈米‘}
  5. console.log(foo+boo) //Hamyundefined 对象中找不到为boo的key值
  6. //如果先定义,再解构,解构的时候需要加上()
  7. let foo;
  8. ({foo}) = {foo:‘Hamy‘}
  9. console.log(foo+bar)

3.3 字符串的解构赋值

  1. //字符串解构
  2. const [a,b,c,d]=‘Hamy‘;
  3. console.log(a,b,c,d) //H a m y

第四篇、对象扩展运算符和rest运算符

4.1 对象扩展运算符

  1. //不确定参数有多少个,可以使用对象扩展运算符...
  2. //当取不到之的时候取到的就是undefined
  3. function hamy(...arg){
  4. console.log(arg[0]); //1
  5. console.log(arg[1]); //2
  6. console.log(arg[2]); //3
  7. console.log(arg[3]); //undefined
  8. }
  9. hamy(1,2,3)
  10. //改变arr2的值会影响arr1的值
  11. let arr1 = [‘www‘,‘xueshuai‘,‘top‘];
  12. let arr2 = arr1;
  13. console.log(arr2); //[‘www‘,‘xueshuai‘,‘top‘]
  14. arr2.push(‘xueshuai‘);
  15. console.log(arr1); //["www", "xueshuai", "top", "xueshuai"]
  16. //使用扩展运算符将arr1里的值赋给arr2,修改arr2不会影响arr1
  17. let arr1 = [‘www‘,‘xueshuai‘,‘top‘];
  18. let arr2=[...arr1];
  19. console.log(arr2);//[‘www‘,‘xueshuai‘,‘top‘]
  20. arr2.push(‘xueshuai‘);
  21. console.log(arr2);//["www", "xueshuai", "top", "xueshuai"]
  22. console.log(arr1);//[‘www‘,‘xueshuai‘,‘top‘]

4.2 rest运算符

使用 for...of 代替 for

  1. //rest 剩余参数
  2. function hamy(first,...arg){
  3. console.log(arg.length) //7 因为first是0,arg是0后面的数,长度为7
  4. for(let val of arg){
  5. console.log(val) //1 2 3 4 5 6 7
  6. }
  7. }
  8. hamy(0,1,2,3,4,5,6,7)

第五篇、新增字符串

5.1 字符串模板

  1. //使用反引号,反引号中使用${}添加变量
  2. //支持空格
  3. //支持html标签
  4. //支持运算
  5. let hamy = ‘哈米‘;
  6. let txt = `锄禾日当午,<br>汗滴禾下土,<br>谁之盘中餐,<br>粒粒皆辛苦。${hamy}`
  7. document.write(txt) //写在页面
  8. let a=1;
  9. let b=2;
  10. let result=`${a+b}`;
  11. document.write(result);

5.2 字符串查找

  1. //字符串查找
  2. document.write(txt.includes(hamy)) //查看字符串中有没有hamy
  3. document.write(txt.startsWith(hamy)) //查看字符串中开头有没有hamy
  4. document.write(txt.endsWith(hamy)) //查看字符串中结尾有没有hamy

5.3 字符串的复制

  1. //字符串的复制,repeat中传入要显示的数量
  2. document.write(‘hamy |‘.repeat(20))

第六篇、数字的操作

  1. //二进制声明 Binary
  2. let binary = 0B010101;
  3. console.log(binary); //21
  4. //八进制声明 Octal
  5. let octal = 0o666;
  6. console.log(octal); //438

6.1 数字判断

  1. let a=11;
  2. console.log(Number.isFinite(a)); //true
  3. console.log(Number.isFinite(‘hamy‘)); //false
  4. console.log(Number.isFinite(NaN)); //false
  5. console.log(Number.isFinite(undefined)); //false
  6. //判断是不是数字
  7. Number.isFinite(a)
  8. //判断NaN
  9. console.log(Number.isNaN(NaN)); //true
  10. console.log(Number.isNaN(4)); //false
  11. //判断是不是整数
  12. let a = 918.1;
  13. console.log(Number.isInteger(a)); //false
  14. //转换为整数
  15. console.log(Number.parseInt(a)); //918
  16. //转换为浮点数
  17. console.log(Number.parseFloat(a)); //918.1
  18. //最大安全整数和最小安全整数
  19. let hamy = Math.pow(2,53)-1
  20. console.log(Number.MAX_SAFE_INTEGER) //9007199254740991
  21. console.log(Number.MIN_SAFE_INTEGER) //-9007199254740991
  22. console.log(Number.isSafeInteger(hamy)) //true 判断是不是安全整数

第七篇、数组方法

7.1 Array.from()

json的数组格式转为数组格式

  1. //什么是json的数组格式
  2. let json = {
  3. "0":"JSPang",
  4. "1":"技术胖",
  5. "2":"大胖逼逼叨",
  6. length:3
  7. }
  8. //json数组格式转为数组
  9. let arr = Array.from(json);
  10. console.log(arr); //[‘JSPang‘,‘技术胖‘,‘大胖逼逼叨‘]

7.2 Array.of()

字符串/数字转为数组格式

  1. //Array.of()转为数组
  2. let arr = Array.of(3,4,5,6)
  3. console.log(arr) //[3,4,5,6]
  4. let arr1 = Array.of(‘jspang‘,‘技术胖‘)
  5. console.log(arr1) //[‘jspang‘,‘技术胖‘]

7.3 find()实例方法

实例方法指的是需要先有一个实例,然后该实例调用该实例方法

  1. //find(fn) 实例方法
  2. //fn(value,index,arr){}
  3. //value 值 | index 下标 | arr 该数组
  4. //按条件查找时,遇到满足条件的情况,停止查找
  5. //按值查找时,查找到返回改值,否则返回undefined
  6. let arr = [1,2,3,4,5,6,7,8,9];
  7. console.log(arr.find(function(value,index,arr){
  8. return value > 5;
  9. })) //6
  10. let arr1 = [‘jspang‘,‘技术胖‘,‘大胖逼逼叨‘];
  11. console.log(arr.find(function(value,index,arr){
  12. return value == ‘小胖子‘;
  13. })) //undefined

7.4  fill()实例方法

  1. //fill(str,start,end) 替换操作
  2. //str要替换的字符串 | start开始替换的下标(从0开始) | end终止的下标(不包含)
  3. let arr = [‘jspang‘,‘技术胖‘,‘大胖逼逼叨‘];
  4. arr.fill(‘web‘,1,3)
  5. console.log(arr) //[‘jspang‘,‘web‘,‘web‘]

7.5 entries()实例方法

  1. let arr = [‘jspang‘,‘技术胖‘,‘大胖逼逼叨‘];
  2. let list = arr.entries();
  3. console.log(list.next().value); //[0, "jspang"]
  4. console.log(‘--------------------------------‘);
  5. console.log(list.next().value); //[1, "技术胖"]
  6. console.log(‘********************************‘);
  7. console.log(list.next().value); //[2, "大胖逼逼叨"]
  8. console.log(‘================================‘);

7.6 数组循环

7.6.1 for...of

  1. let arr = [‘jspang‘,‘技术胖‘,‘大胖逼逼叨‘];
  2. //输出数组项
  3. for(let item of arr){
  4. console.log(item); //‘jspang‘ ‘技术胖‘ ‘大胖逼逼叨‘
  5. }
  6. //输出数组下标
  7. for(let item of arr.keys()){
  8. console.log(item); //0 1 2
  9. }
  10. //输出数组项和下标
  11. for(let [index,val] of arr.entries()){
  12. console.log(index+‘:‘+val); // 0:jspang 1:技术胖 2:大胖逼逼叨
  13. }

第八篇、函数扩展和箭头函数

在ES5中严格模式只能写在js最前面,在ES6中严格模式可以写在函数体内,但是该函数参数不能有默认值,否则报错

 严格模式

  1. function add(a,b) {
  2. ‘use strict‘
  3. if(a == 0){
  4. throw new Error(‘A is Error‘) //主动抛错
  5. }
  6. return a+b;
  7. }
  8. console.log(add(1,2)) //3

 获得传递参数的个数

  1. //获得传递参数的个数
  2. function add(a,b) {
  3. return a+b;
  4. }
  5. console.log(add.length) //只能获取必传参数,参数有了默认值不算在内

 箭头函数

箭头函数中不能使用构造函数

  1. /*function add(a,b) {
  2. return a+b;
  3. }*/
  4. var add = (a,b) => a+b; //(内为函数的形参) 如果函数体内只有一行代码的话,可以不加{}
  5. var add = (a,b) => {return a+b}; //如果必须要写return的话,是需要加{}
  6. console.log(add.length) //2

 第八篇、函数和数组的查缺补漏

 8.1 对象的函数解构

  1. //对象的函数解构
  2. let json = {
  3. a:‘jspang‘,
  4. b:‘技术胖‘
  5. }
  6. function fun({a,b}){
  7. console.log(a,b)
  8. }
  9. fun(json); //‘jspang‘ ‘技术胖‘

 8.2 数组解构

  1. //数组解构
  2. let arr = [‘jspang‘,‘技术胖‘,‘前端教程‘];
  3. function fun(a,b,c){
  4. console.log(a,b,c)
  5. }
  6. fun(...arr); //jspang 技术胖 前端教程

 8.3 in的用法

  1. //in的用法
  2. let obj = {
  3. a:‘技术胖‘,
  4. b:‘jspang‘
  5. }
  6. console.log(‘a‘ in obj); //true
  7. let arr = [,,,]
  8. console.log(arr.length); //3 其实为空,容易引起业务逻辑错误
  9. console.log(0 in arr); //false

 8.4 数组遍历

  1. let arr = [‘jspang‘,‘技术胖‘,‘前端视频‘];
  2. arr.forEach((val,index)=>console.log(index,val))
  3. arr.filter(x => console.log(x)); //过滤
  4. arr.some(x => console.log(x)); //一些
  5. console.log(arr.map(x=> ‘web‘)) //替换

8.5 数组转为字符串

  1. let arr = [‘jspang‘,‘技术胖‘,‘前端视频‘];
  2. console.log(arr.toString()); //jspang,技术胖,前端视频
  3. console.log(arr.join(‘|‘)); //jspang|技术胖|前端视频

第九篇、ES6中的对象

9.1 对象的赋值

  1. let name = ‘jspang‘;
  2. let skill = ‘web‘;
  3. //ES5
  4. let obj = {
  5. name:name,
  6. skill:skill
  7. }
  8. //ES6
  9. let obj = {
  10. name,
  11. skill
  12. }
  13. console.log(obj)

9.2 key值的构建

  1. //不确定key是什么的时候,使用‘[变量]‘代替key值
  2. let key = "skill";
  3. let obj = {
  4. [key]:‘web‘
  5. }
  6. console.log(obj); //{skill:‘web‘}

9.3 自定义对象

9.3.1 is()

  1. //is() 判断对象是否相等
  2. //===同值相等 is严格相等
  3. let obj1 = {name:‘jspang‘};
  4. let obj2 = {name:‘jspang‘};
  5. console.log(obj1.name === obj2.name); //true
  6. console.log(Object.is(obj1.name,obj2.name)); //true
  7. console.log(+0 === -0); //true
  8. console.log(NaN === NaN); //false
  9. console.log(Object.is(+0,-0)); //false
  10. console.log(Object.is(NaN,NaN)); //true

9.3.2 assign()

  1. //assign() 合并对象
  2. let a={a:‘jspang‘}
  3. let b={b:‘技术胖‘}
  4. let c={c:‘web‘}
  5. let d=Object.assign(a,b,c);
  6. console.log(d) //{a: "jspang", b: "技术胖", c: "web"}

第十篇、Symbol在对象中的作用

10.1 认识Symbol

  1. //Symbol
  2. //声明
  3. let f = Symbol();
  4. console.log(typeof f); //symbol
  5. //输出
  6. let jspang = Symbol(‘技术胖‘);
  7. console.log(jspang); //Symbol(技术胖) Symbol类型
  8. console.log(jspang.toString()); //Symbol(技术胖) 转为字符串

10.2 Symbol在对象中的应用

  1. let jspang = Symbol();
  2. let obj = {
  3. [jspang]:‘技术胖‘
  4. }
  5. //对象中取Symbol值时用[]
  6. console.log(obj[jspang])
  7. //修改对象中不确定key的值
  8. obj[jspang]=‘web‘
  9. console.log(obj[jspang])
  1. let obj = {name:‘jspang‘,skill:‘web‘};
  2. let age=Symbol();
  3. obj[age]=18;
  4. //对对象起到了一个保护作用,对不需要展示的key值用symbol类型
  5. for(let item in obj){
  6. console.log(obj[item]); //jspang web
  7. }
  8. console.log(obj[age]) //18

第十一篇、Set和WeakSet数据结构

 Set本身是个去重的过程,所以里面如果有重复的会被忽略

11.1 Set的增删查

  1. //Set
  2. let setArr = new Set([‘jspang‘,‘技术胖‘,‘web‘,‘jspang‘]);
  3. console.log(setArr) //Set(3) {"jspang", "技术胖", "web"} 数据结构
  4. //增加
  5. setArr.add(‘前端职场‘)
  6. //查找 返回true/false
  7. console.log(setArr.has(‘jspang‘));//true
  8. console.log(setArr.has(‘xiaodi‘));//false
  9. //删除某一项
  10. setArr.delete(‘web‘);
  11. console.log(setArr);
  12. //全部删除
  13. setArr.clear();
  14. console.log(setArr);

 11.2 Set的输出

  1. //Set
  2. let setArr = new Set([‘jspang‘,‘技术胖‘,‘web‘,‘jspang‘]);
  3. //for...of
  4. for(let item of setArr){
  5. console.log(item);
  6. }
  7. //forEach
  8. setArr.forEach((value)=>console.log(value))
  9. //size属性
  10. console.log(setArr.size); //3

11.3 WeakSet的声明

  1. //WeakSet
  2. //不允许直接将对象写在WeakSet()里面
  3. //只能通过add添加
  4. let weakobj = new WeakSet();
  5. let obj={a:‘jspang‘,b:‘技术胖‘};
  6. weakobj.add(obj);
  7. console.log(weakobj)

11.4  WeakSet重复值的问题

同Set一样,WeakSet不能存在重复的对象,但是WeakSet有个小技巧

  1. //类似如下这种形式的WeakSet是可以存在重复值的,因为值虽然一样,但是指向的内存空间不同
  2. let weakobj = new WeakSet();
  3. let obj1={a:‘jspang‘,b:‘技术胖‘};
  4. let obj2={a:‘jspang‘,b:‘技术胖‘};
  5. weakobj.add(obj1);
  6. weakobj.add(obj2);
  7. console.log(weakobj)
  8. //----------------------------------------------------------------
  9. //但是如果将obj2的值赋给了obj1,再将obj1添加到weakobj中,就不会存在重复的值
  10. let weakobj = new WeakSet();
  11. let obj1={a:‘jspang‘,b:‘技术胖‘};
  12. let obj2={a:‘jspang‘,b:‘技术胖‘};
  13. obj1 = obj2;
  14. weakobj.add(obj1);
  15. console.log(weakobj)

 第十二篇、map的数据结构

12.1 初始map

  1. //map
  2. let json = {
  3. name:‘jspang‘,
  4. skill:‘web‘
  5. }
  6. console.log(json.name)
  7. let map = new Map();
  8. //这里的json就是key值,iam是value值
  9. map.set(json,‘iam‘);
  10. console.log(map)
  11. //这里的json就是value值,iam是key值
  12. map.set(‘jspang‘,json);
  13. console.log(map);

12.2 map的增删查

  1. //增
  2. map.set(json,‘iam‘);
  3. //取值
  4. console.log(map.get(json))//根据key值取值
  5. //查找
  6. console.log(map.has(‘jspang‘))//返回true和false
  7. //查看值的长度
  8. console.log(map.size);
  9. //删除特定值
  10. map.delete(json);
  11. console.log(map)
  12. //删除全部
  13. map.clear();

第十三篇、proxy

  1. //传统的对象
  2. let obj = {
  3. add:function (val) {
  4. return val+100;
  5. },
  6. name:‘I am JSPang‘
  7. }
  8. console.log(obj.add(100))
  9. console.log(obj.name)

 Proxy的Set和Get

  1. //proxy 代理 ES6 增强 对象和函数(方法) 生命周期 预处理
  2. let pro = new Proxy({
  3. add:function (val) {
  4. return val+100;
  5. },
  6. name:‘I am JSPang‘
  7. },{
  8. get:function (target,key,property) {
  9. console.log(target,key);//target对象体 key要取值的key
  10. return target[key];
  11. },
  12. set:function (target,key,value,receiver) {
  13. console.log(`setting ${key} = ${value}`);
  14. return target[key]=value;
  15. }
  16. })
  17. console.log(pro.name)
  18. pro.name = ‘技术胖‘
  19. console.log(pro.name)

Proxy的apply

  1. let target = function(){
  2. return ‘I am JSPang‘;
  3. }
  4. let handler = {
  5. apply(target,ctx,args){
  6. console.log(‘do apply‘)
  7. return Reflect.apply(...arguments)
  8. }
  9. }
  10. let pro = new Proxy(target,handler);
  11. console.log(pro());

第十四篇、promise

  1. //promise 解决ES5中的回调地狱问题
  2. //1.洗菜做饭
  3. //2.坐下来吃饭
  4. //3.收拾桌子洗碗
  5. let state=1;//状态
  6. function step1(resolve,reject){
  7. console.log(‘1.开始-洗菜做饭‘);
  8. if(state==1){
  9. resolve(‘洗菜做饭-完成‘)
  10. }else{
  11. reject(‘洗菜做饭-错误‘)
  12. }
  13. }
  14. function step2(resolve,reject){
  15. console.log(‘2.开始-坐下来吃饭‘);
  16. if(state==1){
  17. resolve(‘坐下来吃饭-完成‘)
  18. }else{
  19. reject(‘坐下来吃饭-错误‘)
  20. }
  21. }
  22. function step3(resolve,reject){
  23. console.log(‘3.开始-收拾桌子洗碗‘);
  24. if(state==1){
  25. resolve(‘收拾桌子洗碗-完成‘)
  26. }else{
  27. reject(‘收拾桌子洗碗-错误‘)
  28. }
  29. }
  30. new Promise(step1)
  31. .then(function(val){
  32. console.log(val);
  33. return new Promise(step2);
  34. })
  35. .then(function(val){
  36. console.log(val);
  37. return new Promise(step3);
  38. })
  39. .then(function(val){
  40. console.log(val);
  41. })

第十五篇、class

clas类其实就是构造函数的另一种写法

  1. class Coder {
  2. name(val){
  3. console.log(val);
  4. }
  5. }
  6. let jspang = new Coder;
  7. jspang.name(‘技术胖‘)

 15.1 类方法的传参

  1. //类里面若是调用类的方法使用this,每个方法必须return一个值才可以使用
  2. //类里面的各方法之间不用逗号或分号分开
  3. class Coder {
  4. name(val){
  5. console.log(val);
  6. return val;
  7. }
  8. skill(val){
  9. console.log(this.name(‘技术胖‘)+‘:‘+‘Skill-‘+val)
  10. }
  11. }
  12. let jspang = new Coder;
  13. jspang.skill(‘web‘);

 15.2 类的传参

  1. //类的传参需要有一个contructor方法,这个方法接收的就是类的参数
  2. class Coder {
  3. name(val){
  4. console.log(val);
  5. return val;
  6. }
  7. skill(val){
  8. console.log(this.name(‘技术胖‘)+‘:‘+‘Skill-‘+val)
  9. }
  10. constructor(a,b){
  11. this.a=a;
  12. this.b=b;
  13. }
  14. add(){
  15. return this.a+this.b
  16. }
  17. }
  18. let jspang = new Coder(1,2);
  19. console.log(jspang.add())

15.3 类的继承

  1. class Coder {
  2. name(val){
  3. console.log(val);
  4. return val;
  5. }
  6. skill(val){
  7. console.log(this.name(‘技术胖‘)+‘:‘+‘Skill-‘+val)
  8. }
  9. constructor(a,b){
  10. this.a=a;
  11. this.b=b;
  12. }
  13. add(){
  14. return this.a+this.b
  15. }
  16. }
  17. class htmler extends Coder{
  18. //...子类自己的方法
  19. }
  20. let pang = new htmler;
  21. pang.name(‘jspang‘)

第十六篇、模块化操作

首先新建另一个js文件用来充当模块

技术图片

 在temp.js写下如下代码

export var name = ‘jspang‘

在index.js中引用

  1. //export 输出
  2. //import 引入
  3. import {name} from ‘./temp‘;
  4. console.log(name)

终端执行babel-node ‘路径‘命令查看

技术图片

 16.1 多变量输出

  1. //将temp.js里的内容改为如下
  2. var name = ‘jspang‘
  3. var b = ‘技术胖‘
  4. var skill = ‘web‘
  5. export {name,b,skill};

16.2 函数化输出

  1. //修改temp.js的内容如下
  2. export function add(a,b){
  3. return a+b;
  4. }

16.3 语义化输出

  1. //修改temp.js内容如下
  2. var a = ‘jspang‘
  3. var b = ‘技术胖‘
  4. var c = ‘web‘
  5. export {
  6. a as name,
  7. b as cname,
  8. c as skill
  9. }
  10. //修改index.js内容如下
  11. import {name,cname,skill} from ‘./temp‘;

export default在一个js文件中只能有一个

export可以有多个

  1. export输出
  2. import {name,cname,skill} from ‘./temp‘;形式引入
  3. 需要加上{}
  4. export default输出
  5. import shy from ‘./temp‘
  6. 不需要用{},变量名自定义
  7. 使用的时候可以
  8. let {name,cname,skill} = shy

以上是关于ES6的新增特性的主要内容,如果未能解决你的问题,请参考以下文章

ES6新的特性有哪些?

ES6新增的一些特性

ES6的新增特性

ES6的新特性 — 新增关键字letconst

ES6新特性

ES6新增方法