ES6入门二(常见的面试点)

项目中对应的代码github的地址:https://github.com/Barretem/ES6_demo_list

5、面向对象

es5类以及类的继承

//父类
function User(name, age) {
  this.name = name;
  this.age = age;
}

User.prototype.printUserInfo = function () {
  console.log(`${this.name}:${this.age}`);
}

//子类
function VipUser(name, age, level) {
  User.call(this, name, age);

  this.level = level;
}

VipUser.prototype = new User();
VipUser.prototype.constructor = VipUser;

VipUser.prototype.printLevel = function() {
  console.log(`${this.level}`)
}

const class1 = new VipUser('barret', 25, 999);
class1.printUserInfo();
class1.printLevel();

es6类以及类的继承

class User {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  printUserInfo() {
    console.log(`${this.name} : ${this.age}`);
  }
}

//子类
class VipUser extends User {
  constructor(name, age, level) {
    super(name, age);

    this.level = level;
  }

  printLevel() {
    console.log(`${this.level}`)
  }
}

const class1 = new VipUser('barret', 25, 999);
class1.printUserInfo();
class1.printLevel();

es6所写的类相比于es5的优点:

(1)区别于函数,更加专业化(类似于JAVA中的类)

(2)写法更加简便,更加容易实现类的继承


6、Promise

(1)ajax与promise并联请求比较

/**
 * ajax 各个请求并联请求
 */
const ajaxData = () => {
    $.ajax({
        url: './mock/user1.json',
        dataType: 'json',
        success: (res) => {
            console.log(res)
        }
    })

    $.ajax({
        url: './mock/user2.json',
        success: (res) => {
            console.log(res);
        }
    })
};
//            ajaxData();

/**
 * promise 各个请求并联请求
 * --相比于ajax,更加便于数据进行统一处理
 */
const promiseData = function() {
    const p1 = new Promise(function(resolve, reject) {
        $.ajax({
            url: './mock/user1.json',
            dataType: 'json',
            success(res) {
                resolve(res)
            },
            error(err){
                reject(err);
            }
        })
    })

    const p2 = new Promise(function (resolve, reject) {
        $.ajax({
            url: './mock/user2.json',
            success(res) {
                resolve(res)
            },
            error(err){
                reject(err);
            }
        })

    })

    Promise.all([
        p1, p2
    ]).then(function(arr) {
        console.log(arr);
    },function(errArr) {
        console.error(errArr)
    })
}
promiseData();

(2)ajax与promise串联请求比较

/**
 * ajax 各个请求串联请求
 * --下一次请求依赖于上一次请求,如果依赖性比较多嵌入会很多,维护起来会很复杂
 */
const ajaxData = function() {
    $.ajax({
        url: './mock/user1.json',
        dataType: 'json',
        success: (res) => {
            console.log(res)
            if(res.userName == "老王"){
                $.ajax({
                    url: './mock/user1Info.json',
                    success: (res2) => {
                        console.log(res2)
                    }
                })
            }
        }
    })
}
//            ajaxData();

/**
 * promise 各个请求串联请求
 * --缺点,下一个请求依赖于上一个请求也是会嵌套,维护起来会很复杂
 */
const promiseData = function() {
    const p1 = new Promise(function(resolve, reject) {
        $.ajax({
            url: './mock/user1.json',
            success(res) {
                resolve(res);
            },
            error(err) {
                reject(err);
            }
        })
    })

    const p2 = function (input) {
        return new Promise(function(resolve, reject) {
            $.ajax({
                url: './mock/user1Info.json',
                success(res) {
                    resolve({
                        ...res,
                        ...input
                    });
                },
                error(err) {
                    reject(err);
                }
            })
        })
    }

    p1.then(p2)
        .then((res) => {
            console.log(res)
        })
}

promiseData()

7、generator(生成器)

    generator看上去像是一个函数,实际上可以返回多次

    与函数的不同

    (1)generator用function*定义

    (2)generator用yield返回多次

    (3)function一步到底,generator中间可以停顿(踹一脚走一步)

    7.1 基本使用:

function* show() {
    console.log('a');
    yield ;
    console.log('b');
}

const genObj = show();
genObj.next(); //输出a
genObj.next(); //输出b
genObj.next(); //输出{value: undefined, done: true}

    7.2  yield可以传参:  

function* show(num1, num2) {
    console.log(num1 + ' ' + num2);
    const a = yield;
    console.log(a)
}

const genObj = show(66, 99);
genObj.next(12); //输出 "66 99" 没法给yield传参(原因:generator在执行yield前半部分,没走到赋值操作)
genObj.next(55); //输出55
genObj.next(67); //输出{value: undefined, done: true}

    7.3  yield可以返回(相当于return):

function* show() {
    const a = yield 99;
    yield a;
    return 66;
}

const genObj = show();

const a1 = genObj.next(12);
console.log(a1); //输出{value: 99, done: false}

const a2 = genObj.next(55);
console.log(a2); //输出{value: 55, done: false}

const a3 = genObj.next(99);
console.log(a3); //输出{value: 66, done: true}

    7.4 generator与promise处理并联ajax请求

注:使用到的runner.js方便处理generator,源码都在github远程仓库

/**
 * promise 各个请求并联请求
 * --相比于ajax,更加便于数据进行统一处理
 */
const promistData = function() {
    const p1 = new Promise(function(resolve, reject) {
        $.ajax({
            url: './mock/user1.json',
            dataType: 'json',
            success(res) {
                resolve(res);
            },
            error(err) {
                reject(err)
            }
        })
    });

    const p2 = new Promise(function (resolve, reject) {
        $.ajax({
            url: './mock/user2.json',
            success(res) {
                resolve(res)
            },
            error(err){
                reject(err);
            }
        })
    })

    Promise.all([p1, p2]).then(function (arr) {
        console.log(arr)
    }, function (errArr) {
        console.error(errArr)
    })
}
//            promistData();

/**
 * generator 各个请求并联请求
 * --相比promise写法更加简便
 */
runner(function *(){
    let data1=yield $.ajax({url: './mock/user1.json', dataType: 'json'});
    let data2=yield $.ajax({url: './mock/user2.json', dataType: 'json'});

    console.log(data1);
    console.log(data2)
});

    7.4 generator与promise处理串联ajax请求

注:使用到的runner.js方便处理generator,源码都在github远程仓库

/**
 * promise 各个请求串联请求
 * --缺点,下一个请求依赖于上一个请求也是会嵌套,维护起来会很复杂
 */
const promiseData = function() {
    const p1 = new Promise(function(resolve, reject) {
        $.ajax({
            url: './mock/user1.json',
            success(res) {
                resolve(res);
            },
            error(err) {
                reject(err);
            }
        })
    })

    const p2 = function (input) {
        return new Promise(function(resolve, reject) {
            $.ajax({
                url: './mock/user1Info.json',
                success(res) {
                    resolve({
                        ...res,
                        ...input
                    });
                },
                error(err) {
                    reject(err);
                }
            })
        })
    }

    p1.then(p2)
        .then((res) => {
            console.log(res)
        })
}

//            promiseData()

/**
 * generator 各个请求并联请求
 * --相比promise写法更加简便
 */
runner(function *(){
    let data1=yield $.ajax({url: './mock/user1.json', dataType: 'json'});

    if(data1.userName == '老王') {
        let userInfo = yield $.ajax({url: './mock/user1.json', dataType: 'json'});
        console.log(userInfo);
    }
});

    
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值