zoukankan      html  css  js  c++  java
  • Vue-es6语法

    一、Vue课程介绍

    二、es6中的let和const声明变量

    三、es6中的模板字符串

    四、es6的箭头函数(函数的书写)

    五、对象的单体模式

    六、es6中的class的使用

    七、前端三大框架比较

    八、前端框架与库的区别

    九、nodejs中npm的使用


    一、Vue课程介绍

    1)上来先不要搞Vue,因为前端知识太多,html+css+js(ECMAScript5)+jquery+bootstrap+响应式
    2)ECMAScript6的语法(目的:主要在看别人的代码,不要看不懂里面的api)主流的浏览器有部分的es6语法不识别,
    3)服务器语言nodejs express框架 包管理器 npm(要会使用npm) 一个js文件就是一个包(模块) jquery.min.js
    就不用<script>了,而是用npm下载,跟Python的pip3一样
    4)Vue的基础语法
    5)Vue的高级语法
    6)Vue提供的脚手架的东西:vue-cli webpack(前端中的工具)
    7)设计模式 如何在实现单页面应用 前端中的路由...

    复习:1.js的DOM操作:
    节点的操作,dom.appendChild dom.removeChild
    属性的操作dom.setAttribute dom.getAttribute,
    样式属性的操作dom.style.xx,
    值的操作dom.value dom.innerText dom.innerHtml
    2.事件 事件对象回顾起来 阻止冒泡 阻止默认事件

    二、es6中的let和const声明变量

    主流的浏览器有部分的es6语法不识别,通过babel将es6转换成浏览器识别的es5的语法
    1.声明变量 let和const声明变量

    //es5中声明变量使用的是var,带来两个问题,变量提升和作用域的问题
    先看一段代码:

    <script>
    console.log(a);
    var a = 10;
    console.log(a);

    /*
    * 打印结果:
    * undefined
    * 10
    * */
    </script>

    本来打印第一句console.log(a)应该报“a未被定义”的错误,为什么没有报错呢?

    因为上面的代码相当于:

    <script>
    var a;
    console.log(a);
    a = 10;
    console.log(a);
    </script>

    此时,var a=10 这种书写方式就导致了变量提升。
    如果这样写:

    <script>
    console.log(a);
    { var a = 20 }
    console.log(a);
    /*
    * 打印结果:
    * undefined
    * 20
    * */
    </script>

    大括号里的a也会进行变量提升,变为全局变量,大括号的作用域就不起作用了。
    再看代码:

    <script>
    console.log(a);
    {
    var a = 20;
    var a = 30;
    }
    console.log(a);
    /*
    * 打印结果:
    * undefined
    * 30
    * */
    </script>

    如果在大括号里不小心使用了相同的变量,会进行覆盖(本来应该报错“a已被定义”)
    再看下面代码:

    <script>
    var a=[];
    for(var i=0;i<20;i++){
    a[i] = function(){
    console.log(i);
    }
    }
    a[5]();
    /*
    * 打印结果:20
    * 因为循环完后i==20
    * */
    </script>

    如果把 "var i=0" 换成 "let i=0"  打印结果a[5]()==5

    所以:使用let声明变量的好处
    1)属于局部作用域
    2)没有覆盖现象

    而const声明的是常量
    const pi = 3.1415926
    pi = 20 //报错,常量不能被修改
    { const pi = 3.14; } console.log(pi); //报错,“pi未定义”
    const声明的常量属于局部作用域

    三、es6中的模板字符串

    看下面的代码,es5中的字符串拼接:

    <script>
    let name='alex';
    let age=29;
    let desc = name+'今年'+age+'了,鸡汤很多';
    console.log(desc);
    /*
    * 打印结果:
    * alex今年29了,鸡汤很多
    * */
    </script>

    而在es6中可以使用反引号 ${变量} 进行拼接:

    <script>
    let name='alex';
    let age=29;
    let desc = `${name}今年${age}了,鸡汤非常多`;
    console.log(desc);
    /*
    * 打印结果:
    * alex今年29了,鸡汤非常多
    * */
    </script>

    四、es6的箭头函数(函数的书写)

    在es5中的函数书写方式:

    <script>
    function add(a, b) {
    return a+b;
    }
    alert(add(3,4));
    /*
    * 输出:7
    * */
    </script>

    或者

    <script>
    var add = function (a,b){
    return a+b;
    };
    alert(add(3,4));
    /*
    * 输出:7
    * */
    </script>

    在es6中:

    <script>
    var add = (a, b) => {
    return a + b;
    };
    alert(add(3, 7));
    /*
    * 输出:10
    * */
    </script>

    再看一段代码:

    <script>
    var person = {
    name: "alex",
    age: "20",
    fav: function () {
    console.log("喜欢AV");
    console.log(this); //this表示当前对象person
    }
    };
    person.fav();
    /*
    * 输出:
    * 喜欢AV
    * {name: "alex", age: "20", fav: ƒ}
    * */
    </script>

    如果fav函数的定义方式使用es6的方式:

    <script>
    var person = {
    name: "alex",
    age: "20",
    fav: () => {
    console.log("喜欢AV");
    console.log(this); //this指向发生改变,指向了定义person的父级对象window
    }
    };
    person.fav();
    /*
    * 输出:
    * 喜欢AV
    * Window {parent: Window, postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, …}
    * */
    </script>

    以上两种方式书写,this指向不同。
    再看一段代码:

    <script>
    var person = {
    name: "alex",
    age: "20",
    fav: function (content) { //content表示形参
    console.log("喜欢AV");
    console.log(this);
    console.log(arguments[0]) //arguments表示实参
    }
    };
    person.fav('哈哈哈', '呵呵呵');
    /*
    * 输出:
    * 喜欢AV
    * {name: "alex", age: "20", fav: ƒ}
    * 哈哈哈
    * */
    </script>

    如果把上面代码改成箭头函数:

    <script>
    var person = {
    name: "alex",
    age: "20",
    fav: (content) => {
    console.log("喜欢AV");
    console.log(this);
    console.log(arguments) //报错;"arguments未定义"
    }
    };
    person.fav('哈哈哈', '呵呵呵');
    /*
    * 输出:
    * 喜欢AV
    * Window {parent: Window, postMessage: ƒ, blur: ƒ, focus: ƒ, close: ƒ, …}
    * Uncaught ReferenceError: arguments is not defined
    * */
    </script>

    总结:
    function(){} 等价于 ()=>{}
    箭头函数的使用带来的问题:
    1)使用箭头函数,this的指向发生改变
    2)使用箭头函数,arguments不能使用

    五、对象的单体模式

    es5中字面量方式创建对象

    <script>
    var person = {
    name: "alex",
    age: "20",
    fav: function () {
    console.log(this);
    console.log(arguments[0])
    }
    };
    person.fav('哈哈哈');
    /*
    * 输出:
    * {name: "alex", age: "20", fav: ƒ}
    * 哈哈哈
    * */
    </script>

    es6中对象的单体模式

    <script>
    var person = {
    name: "alex",
    age: "20",
    fav() {
    console.log(this);
    console.log(arguments[0]);
    }
    };
    person.fav('哈哈哈');
    /*
    * 输出:
    * {name: "alex", age: "20", fav: ƒ}
    * 哈哈哈
    * */
    </script>

    "fav(){}" 等价于"fav: function(){}"等价于"var fav=function(){}"
    "fav(){}" 就是定义一个名为fav的函数
    总结:
    使用对象的单体模式,对象单体模式就是一个函数
    可以解决箭头函数this的指向和arguments不能使用的问题

    六、es6中的class的使用

    讲对象的单体模式就是为了创建这个类

    <script>
    // es5中:
    // 构造函数模式创建对象,使用new关键字创建对象
    // 构造函数与普通函数的区别是首字母大写
    // (希望创建的对象通过instanceof方法得到的是具体的对象而不是抽象类Object)
    function Person(name, age) {
    this.name = name;
    this.age = age;
    this.alertName = function () {
    alert(this.name);
    }
    }
    var person1 = new Person('alex', 20);
    person1.alertName();
    /*
    * 输出:alex
    * */
    </script>

    ----

    <script>
    //es6中创建对象的方式 使用class
    class Person {
    constructor(name, age) {
    this.name = name;
    this.age = age;
    }
    showName() {
    alert(this.name)
    }
    }
    var p2 = new Person('张三', 20);
    p2.showName();

    /*
    * 输出:张三
    * */
    </script>

    补充:global对象
    ES5的顶层对象,本身也是一个问题。因为它在各种实现里面是不统一的。
    --浏览器里面,顶层对象是window,但Node和Web Worker没有window
    --浏览器和Web Worker里面,self也指向顶层对象,但是Node没有self
    --Node里面,顶层对象是global,但其他环境都不支持

    七、前端三大框架比较

    Vue Angular React

    Vue官方文档:https://cn.vuejs.org/

    八、前端框架与库的区别

    功能上的不同:
    jQuery库:包含DOM(操作DOM)+请求,就是一块功能。
    art-template库:模板引擎渲染,高性能的渲染DOM
    框架:大而全的概念,简易的DOM体验+请求处理+模板引擎
    在KFC的世界里,库就是一个小套餐,框架就是全家桶


    代码上的不同:
    一般使用库的代码,是调用某个函数或者直接使用抛出来的对象,我们自己处理库中的代码。
    一般使用框架,其框架本身提供的好的成套的工具帮我们运行我们编写好的代码。


    框架的使用:
    1.初始化自身的一些行为
    2.执行你所编写的代码
    3.释放一些资源

    九、nodejs中npm的使用

    1.到官网https://nodejs.org/en/下载安装nodejs(傻瓜式安装)
    2.命令行输入:node -v 和 npm -v 查看版本 nodejs的作用是创造JavaScript代码的运行环境,让JavaScript跟Python一样成为服务器语言
    3.初始化,先进入项目的目录,
    执行`npm init` 或  `npm init --yes` 
    执行`npm install vue --save` //下载Vue到当前目录   // 或指定版本`npm install vue@1.0.1 --save`

    {
    "name": "vue_lesson", # 项目的目录
    "version": "1.0.0", # 项目的版本号
    "description": "", # 项目的描述
    "main": "index.js", # 项目的入口文件
    "scripts": { # 项目的脚本
    "test": "echo "Error: no test specified" && exit 1"
    },
    "author": "", # 作者
    "license": "ISC", # 认证证书
    "dependencies": { # 当前项目的依赖
    "vue": "^2.6.10"
    }
    }
  • 相关阅读:
    培养你的领导气质
    头痛
    张颐武:周小平的意义
    浅谈第三方电子支付平台测试方法的研究
    java基础复习二——面向对象一
    jmeter内存溢出处理方式记录
    软件质量管理的八个法则
    CMM已经落伍了,敏捷才是王道
    空间管理 您的位置: 51Testing软件测试网 » lilisx2006的个人空间 » 日志 在一个没有测试经理的小公司如何做好测试
    mysqladmin: connect to server at 'localhost' failed error: 'Access denied for user 'root'@'localhost' (using password: YES)'
  • 原文地址:https://www.cnblogs.com/staff/p/11715010.html
Copyright © 2011-2022 走看看