第四节
9.symbol (一点用都没有)
独一无二的字符串;(类似字符串)
**js里有6种原始数据类型;
10.Promise 异步编程的解决方案 (非常重要)
异步的问题:数据还没传过来,但是已经执行了,数据是undefined
es5中的异步编程解决方案:回调函数;
promise的优势
promise.then().then().then()…
语法;
new Promise(function(resolve,reject){你的操作}) 以函数作为参数
resolve函数是在异步操作成功时调用,并且把异步操作的结果作为参数传递出去;
reject 函数是在操作失败时调用,并且把异步操作的结果作为参数传递出去;
then函数里面接收两个函数当参数,第一个函数是异步操作成功时的函数;第二个函数时异步操作失败时候的函数(可省略)
举例:
let a=10
let promise=new Promise((resolve,reject)=>{
if(a==10){
resolve(“成功”)
}else{
reject("失败“)
}
})
promise.then(res=>{console.log(res)},res=>{console.log(res)})
***promise和ajex 没有任何关系,是回调函数的优化版;
写一个异步的举例:
let status=1
let user=(resolve,reject)=>{
setTimeout(()=>{
if(status==1){
resolve({data:“登陆成功”;msg:“张三”,token:“abc”})
}else{
reject(“失败了”)
},2000)
}
(再复制一个函数)
let admin=(resolve,reject)=>{
setTimeout(()=>{
if(status==1){
resolve({data:“获取用户信息成功”;msg:“李四”,token:“bcd”})
}else{
reject(“失败了”)
},1000)
}
new.Promise(user).then(res=>{console.log(res)})
**promise 在vue中再有实际案例;
10.类,class,可以理解为对象;
叫“语法糖”,为了让后端程序员更容易理解,其实功能并没有很大的改变;
class Point {
constructor(x, y) {
this.x = x;
this.y = y;
}
toString() {
return ‘(’ + this.x + ', ’ + this.y + ‘)’;
}
}
ES6 的类,完全可以看作构造函数的另一种写法。
**在类里面加的函数相当于在原型中加了函数,子集完全可以调用;
把函数和对象分来,class是对象,函数在class类里面;
constructor方法是一定有的,你不加系统默认加;
new和之前的方法一样,创建实例;
**class继承:
Class 可以通过extends关键字实现继承,这比 ES5 的通过修改原型链实现继承,要清晰和方便很多。
class Point {
}
class ColorPoint extends Point {
}
上面代码定义了一个ColorPoint类,该类通过extends关键字,继承了Point类的所有属性和方法。但是由于没有部署任何代码,所以这两个类完全一样,等于复制了一个Point类。
下面,我们在ColorPoint内部加上代码。
子集 “extends” 父集
class ColorPoint extends Point {
constructor(x, y, color) {
super(x, y); // 调用父类的constructor(x, y)
this.color = color;
}
toString() {
return this.color + ’ ’ + super.toString(); // 调用父类的toString()
}
}
上面代码中,constructor方法和toString方法之中,都出现了super关键字,它在这里表示父类的构造函数,用来新建父类的this对象。
子类必须在constructor方法中调用super方法,否则新建实例时会报错。这是因为子类自己的this对象,必须先通过父类的构造函数完成塑造,得到与父类同样的实例属性和方法,然后再对其进行加工,加上子类自己的实例属性和方法。如果不调用super方法,子类就得不到this对象。
***class 在react中用处非常广
第五节
1.模块化语法
js和js之间是不能互相引用的;
框架中根本不写html
export var a=1;(导出的一定是完整的变量声明语句,比如变量,数组,对象,函数)
import{a} from “/index.js”
import “./ index.js”(引入整个文件)
import “./css/style.css”
2)可以重命名(倒入/导出)
export { my as b}
通常情况下,export输出的变量就是本来的名字,但是可以使用as关键字重命名。
function v1() { … }
function v2() { … }
export {
v1 as streamV1,
v2 as streamV2,
v2 as streamLatestVersion
};
上面代码使用as关键字,重命名了函数v1和v2的对外接口。重命名后,v2可以用不同的名字输出两次。
需要特别注意的是,export命令规定的是对外的接口,必须与模块内部的变量建立一一对应关系。
export default 1 —— default 其实就是变量