ES6-学习之路-05

ES6-学习之路-05

用Proxy进行预处理

在运行函数前初始化一些数据,在改变对象值后做一些善后处理。这些都算钩子函数,Proxy的存在就可以让我们给函数加上这样的钩子函数,你也可以理解为在执行方法前预处理一些代码。你可以简单的理解为他是函数或者对象的生命周期。 首先定义对象如下:

let obj = {
    add: (val) => {
        return val + 100
    },
    name: 'I am du'
}
console.log(obj.add(10))
console.log(obj.name)
复制代码

声明proxy

用new的方法对Proxy进行声明。可以看一下声明Proxy的基本形式。new Proxy({},{}) 以下是定义proxy的完整代码:

/** 定义proxy*/
let pro = new Proxy({
    add: (val) => {
        return val + 100
    },
    name: 'I am du'
}, {
    get: (target, key, property) => {
        console.log('before get')
        return target[key]
    }
})
console.log(pro.name)
复制代码
get属性
  • target:得到的目标值
  • key:目标的key值,相当于对象的属性
  • property:这个不太常用,用法还在研究中,还请大神指教。

set属性

set属性是值你要改变Proxy属性值时,进行的预先处理。它接收四个参数:

  • target:目标值。
  • key:目标的Key值。
  • value:要改变的值。
  • receiver:改变前的原始值。
let pro = new Proxy({
    add: (val) => {
        return val + 100
    },
    name: 'I am du'
}, {
    get: (target, key, property) => {
        console.log('before get')
        return target[key]
    },
    set: (target, key, value, receiver) => {
        console.log(`${receiver[key]}=>${value} `)
        return target[key] = value

    }
})
console.log(pro.name)
pro.name = 'ming'
console.log(pro.name)

输出如下:
before get
proxy.js:28 I am du
proxy.js:20 before get
proxy.js:24 I am du=>ming 
proxy.js:20 before get
proxy.js:30 ming
复制代码

apply

apply的作用是调用内部的方法,它使用在方法体是一个匿名函数。

let target = function() {
    return 'I am test';
};
var handler = {
    apply(target, ctx, args) {
        console.log('do apply');
        return Reflect.apply(...arguments);
    }
}

var pro2 = new Proxy(target, handler);

console.log(pro2());
复制代码

promise使用

ES6中的promise的出现给我们很好的解决了回调地狱的问题,在使用ES5的时候,在多层嵌套回调时,写完的代码层次过多,很难进行维护和二次开发,ES6认识到了这点问题,现在promise的使用,完美解决了这个问题。那我们如何理解promise这个单词在ES5中的作用那,你可以想象他是一种承诺,当它成功时执行一些代码,当它失败时执行一些代码,更符合人类的行为思考习惯。

promise的基本用法

promise执行多步操作非常好用,那我们就来模仿一个多步操作的过程,那就以吃饭为例吧。要想在家吃顿饭,是要经过三个步骤:

  • 洗菜做饭。
  • 坐下来吃饭。
  • 收拾桌子洗碗。
    这个过程是有一定的顺序的,你必须保证上一步完成,才能顺利进行下一步,现在用promise来实现。
/**promise的使用 */
let state = 1;

function step1(resolve, reject) {
    console.log('1.开始-洗菜做饭');
    if (state == 1) {
        resolve('洗菜做饭--完成');
    } else {
        reject('洗菜做饭--出错');
    }
}


function step2(resolve, reject) {
    console.log('2.开始-坐下来吃饭');
    if (state == 1) {
        resolve('坐下来吃饭--完成');
    } else {
        reject('坐下来吃饭--出错');
    }
}


function step3(resolve, reject) {
    console.log('3.开始-收拾桌子洗完');
    if (state == 1) {
        resolve('收拾桌子洗完--完成');
    } else {
        reject('收拾桌子洗完--出错');
    }
}
new Promise(step1).then(function(val) {
    console.log(val);
    return new Promise(step2);

}).then(function(val) {
    console.log(val);
    return new Promise(step3);
}).then(function(val) {
    console.log(val);
    return val;
});
复制代码

上面示例代码中,resolve 和 reject是两个函数变量,resole函数在Promise对象执行成功的时候触发,reject函数则在Promise对象执行失败的时候触发,Promise实际上就是前面说过的Proxy。

class类的使用

class的定义见如下代码:

class Code {
    name(val) {
        console.log(val)
    }
}
let code = new Code
code.name('duduming')
console.log(code.name)
复制代码

class类内多函数互相调用:

class Code {
    name(val) {
        console.log(val)
        return val
    }
    anthorM(val) {
        console.log(this.name('test') + ' another method' + val)
    }
}
let code = new Code
    //code.name('duduming')
code.anthorM('ano')
复制代码

类的构造函数: 通过constructor构造函数,向class内传参,然后在class内的方法中使用参数。

class Code {
    name(val) {
        console.log(val)
        return val
    }
    anthorM(val) {
        console.log(this.name('test') + ' another method' + val)
    }
    add() {
        return this.a + this.b
    }
    constructor(a, b) {
        this.a = a
        this.b = b
    }
}
let code = new Code(3, 4)
    //code.name('duduming')
console.log(code.add())
复制代码

class的继承,通过extends关键字。

class Code {
    name(val) {
        console.log(val)
        return val
    }
    anthorM(val) {
        console.log(this.name('test') + ' another method' + val)
    }
    add() {
        return this.a + this.b
    }
    constructor(a, b) {
        this.a = a
        this.b = b
    }
}

class SonCode extends Code {

}

let sonCode = new SonCode(3, 4)
    //code.name('duduming')
console.log(sonCode.add(4, 5))
复制代码

模块化

export

export可以让我们把变量,函数,对象进行模块话,提供外部调用接口,让外部进行引用。先来看个最简单的例子,把一个变量模块化。我们新建一个temp.js文件,然后在文件中输出一个模块变量。

export default的使用

加上default相当是一个默认的入口。在一个文件里export default只能有一个。我们来对比一下export和export default的区别

  1. export
export var a ='jspang';
 
export function add(a,b){
    return a+b;
}
复制代码

对应的引入方法:

export var a ='jspang';
 
export function add(a,b){
    return a+b;
}
复制代码
  1. export default
export default var a='jspang'
复制代码

对应引入方式

import str from './temp';
复制代码

参考链接

技术胖blog

内容概要:《中文大模型基准测评2025年上半年报告》由SuperCLUE团队发布,详细评估了2025年上半年中文大模型的发展状况。报告涵盖了大模型的关键进展、国内外大模型全景图及差距、专项测评基准介绍等。通过SuperCLUE基准,对45个国内外代表性大模型进行了六大任务(数学推理、科学推理、代码生成、智能体Agent、精确指令遵循、幻觉控制)的综合测评。结果显示,海外模型如o3、o4-mini(high)在推理任务上表现突出,而国内模型如Doubao-Seed-1.6-thinking-250715在智能体Agent和幻觉控制任务上表现出色。此外,报告还分析了模型性价比、效能区间分布,并对代表性模型如Doubao-Seed-1.6-thinking-250715、DeepSeek-R1-0528、GLM-4.5等进行了详细介绍。整体来看,国内大模型在特定任务上已接近国际顶尖水平,但在综合推理能力上仍有提升空间。 适用人群:对大模型技术感兴趣的科研人员、工程师、产品经理及投资者。 使用场景及目标:①了解2025年上半年中文大模型的发展现状与趋势;②评估国内外大模型在不同任务上的表现差异;③为技术选型和性能优化提供参考依据。 其他说明:报告提供了详细的测评方法、评分标准及结果分析,确保评估的科学性和公正性。此外,SuperCLUE团队还发布了多个专项测评基准,涵盖多模态、文本、推理等多个领域,为业界提供全面的测评服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值