es6小结

et和const

let块级作用域:{就是代码块}向上寻找距离该变量最近的开始的函数的{作用范围就是该{}之内

 
  1. {

  2. let a=10;

  3. }

  4. console.log(a);会报错 let作用域是代码块以内的区域

let不能重复声明
 会报错'm' has already been declared
 let m=100;
 let m=1;

没有变量提升的概念
            Cannot access 'm' before initialization
            console.log(m);
            let m=10;

暂时性死区:在一个代码块内,如果有某个变量,会绑定该区域,不再受外界的影响,let没有变量提升的概念

let声明变量之前,不能使用

 
  1. let m=100;

  2. {

  3. console.log(m); 暂时性死区

  4. let m=10;

  5. }

 
  1. // 重复声明

  2. // let a=10;

  3. // var a=10;

  4.  
  5. //重复声明

  6. // let a=10;

  7. // {

  8. // var a=10;

  9. // }

  10.  
  11. // 不会报错

  12. // var a=10;

  13. // {

  14. // let a=10;

  15. // }

  16.  
  17. // let a=10;

  18. // {

  19. // var a=10;

  20. // }

  21.  
  22. let a=10;

  23. (function add(){

  24. var a=10;

  25. }

  26. )();

const

声明的是常量,值是不可以改变的(不能重新赋值),其余语法和let一样

 
  1. const a=5000;

  2. // a=100;

  3.  
  4. // stu是对象,在内存中以地址的形式存储,

  5. const stu={

  6. name:'zs'

  7. }

  8. // 修改了数据。所以地址没有变化。不会报错

  9. stu.name='ls';

  10.  
  11. // 重新赋值会报错。

  12. stu={

  13. name:'ls'

  14. }

字符串扩展

 
  1. var pro={

  2. title:'华为手机',

  3. price:4999

  4. }

  5. product.innerHTML+="<tr><td>"+pro.title+"</td><td>"+pro.price+"</td></tr>";

  6.  
  7. // 模板字符串 在变量和常量拼接的时候使用 整个字符串使用`${变量}`

  8. product.innerHTML+=`<tr>

  9. <td>${pro.title}</td>

  10. <td>${pro.price}</td>

  11. </tr>`;

  12.  
  13. // 标签模板 ``可以跟在一个函数后面,该函数将被调用来处理这个模板字符串。这被称为模板标签功能

  14. // alert(123);

  15. // alert`123`;

  16.  
  17. //

  18. function fn(x,y){

  19. // console.log(x,y)

  20. console.log(arguments);

  21. };

  22. // fn(1,23);

  23. // 解析函数参数的时候,会把参数解析成一个数组形式

  24. fn`1,23,23,23,45`;

  25.  
  26.  
  27. // 模板字符串作为函数参数参数存在。会执行函数。自动解析参数 把所有常量拼接成一个数组。变量依次拼接到数组后面

  28. var m=10;

  29. var n=100;

  30. fn`hello${m}zsh${n}m${m+n}n`;

  31.  
  32. // 等价于

  33. // fn(['hello','zsh','m','n'],m,n,m+n);

解构

解构:es6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这称为解构

es5中,如果对多个变量赋值
             let a=10;
             let b=100;
             let c='h';

 
  1. // 数组的解构,按照数组顺序依次赋值。如果变量多余,相当于声明不赋值。如果数据多余,对变量没有影响

  2. var [a,b,c,d]=[10,100,'h',12,3,4,4,5];

  3.  
  4. console.log(a,b,c,d);

 
  1. // 快速交换值

  2. let m=12;

  3. let n='my';

  4.  
  5. [n,m]=[m,n];

  6.  
  7. console.log(m,n);

 对象的解构赋值 使用的是{}
 对象的解构与数组的解构有一个重要的不同,数组的元素是按次序排列的
 数组解构中,变量的值由所处的位置决定。对象的属性没有次序,变量必须与属性同名才可以,才可以取到正确的值。

 
  1. var stu={name:'zs',age:12};

  2. // hobby相当于声明了没有赋值。

  3. let {name,age,hobby}=stu;

  4. console.log(name,age,hobby);

  5.  
  6.  
  7. // 字符串的解构。按照字符串的顺序依次赋值和数组解构类似

  8. let [x,y,z]='hello';

  9. console.log(x,y,z);

  10.  
  11. // 类似数组的对象都有一个length属性,可以对该属性进行解构赋值。

  12. let {length:len}='zsh';

  13. console.log(len);

  14.  
  15. // 函数的解构赋值,类似于数组的解构解构

  16. function add([a,b]){

  17. console.log(a,b);

  18. console.log(a+b)

  19. }

  20. add([3,4]);

  21.  
  22. // 相当于把字符串3赋值给了a 字符串4赋值给了b

  23. add('34');

数组扩展

 
  1. var arr=new Array(10);

  2.  
  3. // 长度为10的数组。

  4. console.log(arr);

  5. // Array.of()对new Array()的扩展 。不论输入什么,都代表的是数组元素。

  6. arr=Array.of(10);

  7. console.log(arr);

  8.  
  9. // Array.from()把类数组转化为数组

  10. var btns=document.getElementsByTagName('button');

  11. console.log(btns);

  12. console.log(btns instanceof Array);

  13. btns=Array.from(btns);

  14. // foreach不能用来遍历类数组,能遍历数组

  15. btns.forEach(function(item,index,arr){

  16. console.log(arr);

  17. })

  18.  
  19. // 类数组 一定要严格按照格式来写 属性名是0 1 2 并且一定要有length。如果转化为了数组,最终的长度由length的值

  20. var arr1={

  21. 0:'z',

  22. 1:'s',

  23. 2:'h',

  24. length:5

  25. }

  26. arr1=Array.from(arr1);

  27. arr1.forEach(function(item,index,arr){

  28. console.log(item);

  29. })

  30.  
  31. var score=[98,60,48,56];

  32.  
  33. // 数组.find(function(n代表数组元素){条件})得到的结果是第一个符合条件的数组元素的值。从左到右寻找 如果找不到结果是undefined。

  34. // var m=score.find(function(n){return n<0});

  35. // console.log(m);

  36.  
  37.  
  38. // 数组.findIndex(function(n代表数组元素){条件})得到的结果是第一个符合条件的数组元素的下标。从左到右寻找 如果找不到结果是-1。

  39. var m=score.findIndex(function(n){return n>60});

  40. console.log(m);

construto

construtor方法是类的默认方法,一个类必须有constructor方法。
                如果没有显示定义,一个空的constructor方法会被默认添加
                通过new命令生成实例对象的时候,自动调用该方法

                constructor默认返回的是实例对象。完全可以指定返回另外一个对象

es6中的继承

es6中通过extends关键字实现继承。比在es5中通过原型链实现继承,要清晰和方便。更偏向传统编程语言

 
  1. class Cat extends Animal{

  2. constructor(name,color,type){

  3. // super继承来自父级的属性(相当于把父级的属性一一复制过来)

  4. // 如果constructor没有该属性传递不过来,直接书写属性会报错 super(name,color,price)

  5. super(name,color);

  6. this.type=type;

  7. }

  8. }

  9.  
  10. class Dog extends Animal{

  11. constructor(name,color,price,type){

  12. super(name,color,price);

  13. this.type=type;

  14. }

  15. }

  16.  
  17. // 把实参的值,赋值给了constructor

  18. var cat1=new Cat('花花','白色','波斯猫');

  19. console.log(cat1);

  20. // 属性是自有的,不继承。

  21. console.log(cat1.hasOwnProperty('name'));

  22. cat1.eat();

继承相关问题

原型链:当从一个对象那里调取属性或方法时,如果该对象自身不存在这样的属性或者方法,
             就会去关联的prorotype那里寻找,如果prototype没有。就会去prototype关联的prototype那里寻找。如果还没有,会一直向上寻找
             直到prototype....prototype..为null。从而形成了原型链(根本上来说就是继承)
             a.isPrototypeOf(b) 判断a是否存在b的原型链中

 在子类的constructor中必须要有super关键字,如果不写,会报错
                     子类的this关键字根据super方法创建
                     子类实例对象的构建,是基于父类实例进行加工。只有super方法才可以返回父类实例
                     super();

 
  1. class Cat extends Animal{

  2. constructor(name,color,type){

  3. // super继承来自父级的属性(相当于把父级的属性一一复制过来)

  4. // 如果constructor没有该属性传递不过来,直接书写属性会报错 super(name,color,price)

  5. super(name,color);

  6. this.type=type;

  7. }

  8. }

  9.  
  10. var c1=new Cat('花花','白色','波斯猫');

  11.  
  12. class BSM extends Cat{

  13. constructor(){

  14. // 在子类的constructor中必须要有super关键字,如果不写,会报错

  15. // 子类的this关键字根据super方法创建

  16. // 子类实例对象的构建,是基于父类实例进行加工。只有super方法才可以返回父类实例

  17. // super();

  18. }

  19. }

  20.  
  21. var b1=new BSM();

  22. console.log(Animal.prototype.isPrototypeOf(c1));

  23. console.log(Animal.prototype.isPrototypeOf(b1));

  24. console.log(Cat.prototype.isPrototypeOf(b1));

get和set

 
  1. class Circle{

  2. constructor(){

  3. this.r=10;

  4. }

  5. // get方法 获取的值的时候会自动调用 一定要加返回值

  6. get acr(){

  7. return Math.PI*this.r*this.r;

  8. }

  9. // set方法 设置值的时候会自动调用 实参是通过等于号赋值。

  10. set acr(value){

  11. this.r=value

  12. }

  13. }

  14.  
  15. var c=new Circle();

  16. // console.log(c.acr);

  17. // 调用的是set方法

  18. c.acr=1;

  19.  
  20.  
  21. // 调用的是set方法

  22. // console.log(c.acr);

静态方法和静态属性

 
  1. // Math.random() Math.PI

  2. class Cat{

  3. // 类中的方法前面如果加了sataic关键字,该方法就是静态方法

  4. // 静态方法只能通过类名直接调用。

  5. static eat(){

  6. console.log('这是静态方法,需要通过类直接调用')

  7. }

  8. }

  9. // 静态属性指的是类本身有的属性,通过类名.属性名直接调用。不需要实例化对象调用

  10. Cat.type='XXX';

  11.  
  12. var c=new Cat();

  13. // c.eat(); 会报错 cat是静态方法

  14. Cat.eat();

  15.  
  16. console.log(Cat.type);

  17.  
  18.  
  19. // 静态方法和静态属性可以被子类继承

  20. class Bsm extends Cat{

  21. constructor(){

  22. super()

  23. }

  24. }

  25.  
  26. Bsm.eat();

  27. console.log(Bsm.type);

私有方法

 
  1. class Cat{

  2. eat(){

  3. this._food()

  4. }

  5. // 在es6的提案,提到了如果方法名以_开始,默认只能在类中调用,不能被继承或者被实例对象使用,但是目前没有什么用

  6. _food(){

  7. console.log('这是水果');

  8. }

  9. }

  10. var c=new Cat();

  11. c._food();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该资源内项目源码是个人的课程设计、毕业设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值