es6基础知识点整理二-------面向对象,json,Promise,generator

面向对象

es5面向对象写法
在es5中,构造函数和类是一个东西
继承:
1、子类.prototype = new 父类(); // 通过实例化来实现继承
2、父类.call(this, 参数, 参数); // 通过call方法实现继承

// 构造函数
function User(name,pass){
      this.name = name;
      this.pass = pass;
}
// 使用prototype增加方法
User.prototype.showName = function (){
     alert(this.name);
}
User.prototype.showPass = function(){
    alert(this.pass);
}
// 实例化
var a = new User("qss", "123456");
// 实例调用
a.showName();
a.showPass();
// 继承
function VipUser(name, pass, level){
       // es5使用call实现继承父类方法 
       User.call(this, name, pass);
       this.level = level;
}
VipUser.prototype = new User();
// 补下constructor 指向会乱
VipUser.prototype.constructor = VipUser;
VipUser.prototype.showLevel = function(){
        alert(this.level);
}
var b = new VipUser("qss", "qwer", 10);
b.showName();
b.showPass();
b.showLevel();

es6面向对象写法,相对于es5就方便多了
1、class关键字、构造器和类分开了
2、class里面直接加方法

class 类名{
    //构造函数
    constructor(name,pass){
        this.name = name;
        this.pass = pass;
    }
    // 直接写方法,不要function,不要逗号分号
    showName(){
        alert(this.name);
    }
    showPass(){
        alert(this.pass);
    }
}
// 使用,和es5一样
var u1 = new 类名(参数,参数);
u1.showName();
u1.showPass();

继承

super – 超类,也就是父类,更正式点

  class 继承类名 extends  父类名{
        constructor(name,pass,level){
            super(name,pass);// 表示执行父类的构造函数
            this.level = level;// 再加上自己的
        }
        // 自己的方法
        showLevel(){
            alert(this.level);
        }
    }
    // 使用
    var u2 = new 继承类名(参数1,参数2,参数3);
    u2.showName();
    u2.showPass();
    u2.showLevel();

代码示例

class User{
    constructor(name,pass){
        this.name = name;
        this.pass = pass;
    }
    showName(){
        alert(this.name);
    }
    showPass(){
        alert(this.pass);
    }
}
// 扩展
class VipUser extends User{
    constructor(name,pass,level){
        super(name,pass);// 执行父类的构造函数
        this.level = level;
    }
    showLevel(){
        alert(this.level);
    }
}

var v1 = new VipUser("qss","123456",3);
v1.showName();
v1.showPass();
v1.showLevel();

json

  • json字符串的标准写法:
    1、只能用双引号
    2、所有的名字(key)都必须用引号包起来
   {"a":12,"b":5}
   {"a":"hhh","b":"kkk"}
  • json对象,方法
    JSON.stringify json对象转换为字符串
    JSON.parse json字符串转换为json对象
    在这里插入图片描述
  • 简写
    名字和值(key/value)一样的 留一个就行
  let a=12;
  let b=2;
  let json = {a:a,b:b,c:55};   -----可简写为   let json = {a,b,c:55}; 

json中有方法 :function 可以删除

    let json = {
           a:12,
           show:function(){
               alert(this.a);
           }
       }
       json.show();
       ----可简写为
       let json = {
           a:12,
           show(){
               alert(this.a);
           }
       }
       json.show();

Promise

  • 链式调用
  • 状态不可逆(pending-进行中、fullfilled-成功、rejected-失败)
  • Promise实例必须包含then
  • then必须接受两个函数参数,一个成功、一个失败
  • then()返回的必须是一个promise对象
  • then()没有明文返回promise,后面的then就都用初始的
    异步 操作之间没关系,同时进行多个操作
    同步 同时只能做一件事

异步 代码复杂
同步 代码简单

有了Promise之后的异步
基础写法

let p = new Promise(function(resolve,reject){
    $.ajax({
        url:"../data/arr.txt",
        dataType:"json",
        success(data){
            resolve(data);
        },
        error(err){
            reject(err);
        }
    })
});

p.then(function(data){
    console.log("成功");
    console.log(data);
},function(err){
    console.log("失败")
})

同时获取多个文件数据

function creatData(url){
    return new Promise((resolve, reject)=>{
        $.ajax({
            url:url,
            dataType:"json",
            success(data){
                resolve(data);
            },
            error(err){
                reject(err);
            }
        })
    })
}
Promise.all([
    creatData("../data/arr.txt"),
    creatData("../data/json.txt")
]).then(data=>{
    console.log("成功");
    console.log(data[0]);
    console.log(data[1]); 
},err=>{
    console.log("失败")
})

jquery封装写法
Promise.all([ajax1, ajax2,ajax3]).then(successfun, errfun);
Promise.race
区别:

  • all待全部完成,统一执行success
  • race只要有一个完成,就执行success
  Promise.all([
        $.ajax({url:"../data/arr.txt", dataType:"json"}),
        $.ajax({url:"../data/json.txt", dataType:"json"})
    ]).then(result => {
    // 多个文件同时请求,返回值是一个数组,分别对应各个文件值
        let [arr, json] = result;
        console.log(arr,json);
        console.log("成功");
    },err => {
        console.log("失败")
    })

generator生成器----可以让函数走走停停

普通函数-----一路到底
generator生成器函数-----可以让函数走走停停

’ * ’ 和 yield 是generator函数的标志

  • 写法 *可以挨着function或者函数名,也可以两个都不挨,不能连着两个,不能写成剪头函数的形式
  • 搭配yield使用,yield暂停、放弃的意思
  • generator函数,是创建了一个generator对象,对象才可以接着执行
  • gen对象.next()函数,写一个执行一步,以yield隔开
    function * show(){
        代码1...
        yield;
        代码2...
    }
    
    let gen = show(); 
    gen.next(); // 执行代码1
    gen.next()// 执行代码2

Promise和generator都是用于异步获取,区别在这篇中
几种异步请求的区别,简单写法](https://blog.csdn.net/sinat_41904410/article/details/99004146)

发布了18 篇原创文章 · 获赞 0 · 访问量 384

猜你喜欢

转载自blog.csdn.net/sinat_41904410/article/details/99189547
今日推荐