学习前端第三十四天(call,apply,函数绑定;箭头函数;对象属性配置)

embedded/2024/11/9 16:45:26/

一、call、apply

function fn(x, y) {

            console.log("hello", x, y, this)

        };

1.call方法

作用:调用后执行函数,可以给“this”传参数

        fn.call({ a: 1 }, 1, 2,);

2.apply方法

第一个给“this”传参数,第二个参数需要是数组形式,然后与形式参数一一对应赋值

        fn.apply({ a: 2 }, [9, 3, 4, 5]);

3.区别

call可以传多个参数,apply只能传两个参数,一个对象一个数组

4.借用

利用传对象的特性用call方法对可迭代对象使用数组方法

        const str = "hello";let str2 = [].join.call(str, "-");console.log(str2); // h-e-l-l-o

二、函数绑定bind

1.复制函数,绑定参数

        'use strict'function fn(x, y) {console.log("hello", this, x, y)}const fn2 = fn.bind({ a: 1 })const fn3 = fn.bind({ a: 1 }, 1)const fn4 = fn.bind({ a: 1 }, 1, 2)fn(1, 2);  // 未进行绑定fn1(3, 4); // 绑定好了this参数,传入的值会被赋值给x,yfn2(5);    // 绑定好了this参数和x的值,传入的值会被赋值给yfn3();     // 绑定好了this参数,x的值,y的值

2.复制join方法并绑定方法的this

        const join = [].join.bind("abc");console.log(join("-"));  // a-b-cconsole.log(join(","));  // a,b,cconsole.log(join(";"));   // a;b;c

绑定join处理的字符串,自定义用何种方式连接字符串

三、箭头函数

面试题:

        // 箭头函数没有局部变量“this”,this会向上层找

        // 箭头函数没有“arguments”(收集实际参数)

        // 不能使用new调用

四、对象配置属性

1.属性标志和属性描述符

Object.getOwnPropertyDescriptor 方法允许查询有关属性的 完整 信息。

 Object.getOwnPropertyDescriptors(obj) 方法,一次获取所有属性描述符

  • writable — 如果为 true,则值可以被修改,否则它是只可读的。
  • enumerable — 如果为 true,则会被在循环中列出,否则不会被列出。
  • configurable — 如果为 true,则此属性可以被删除,这些特性也可以被修改,否则不可以。
        const user = {username: "jack",age: 20,};// 对对象的一个属性细节修改,给不存在的属性进行修改会新增改属性Object.defineProperty(user, "username", {value: "ll",writable: false,configurable: false,enumerable: false,})Object.defineProperty(user, "uname", {value: "llwe",writable: false,configurable: false,enumerable: false,})// 可写性;可遍历性;可删除性   console.log(Object.getOwnPropertyDescriptor(user, "username")); // 一次获取所有属性描述符

 Object.defineProperties(obj, descriptors),允许一次定义多个属性。

        // 对当前对象进行批量修改,添加Object.defineProperties(user, {size: {value: 20,writable: false,configurable: true,enumerable: false,},hobby: {value: ["css", "html"]},});

Object.freeze(obj),禁止添加/删除/更改属性。为所有现有的属性设置 configurable: false, writable: false

2.属性的 getter 和 setter

有两种类型的对象属性。

第一种是 数据属性

第二种类型的属性。 访问器属性。用于获取和设置值的函数,但从外部代码来看就像常规属性。

  • get —— 一个没有参数的函数,在读取属性时工作,
  • set —— 带有一个参数的函数,当属性被设置时调用,
let user = {name: "John",surname: "Smith",get fullName() {return `${this.name} ${this.surname}`;},set fullName(value) {[this.name, this.surname] = value.split(" ");}
};// set fullName 将以给定值执行
user.fullName = "Alice Cooper";alert(user.name); // Alice
alert(user.surname); // Cooper

实际应用:

        const user = {gender: 2,get cnGender() {const obj = { 1: "男", 2: "女" };return obj[this.gender]},set cnGender(value) {const obj = { 男: 1, 女: 2 }this.gender = obj[value];}}console.log(user.cnGender);user.cnGender = "男";console.log(user.cnGender);

当读取cnGender时,会根据gender的值输出cnGender;

修改cnGender时,会通过函数对应关系修改gender值,然后输出cnGender时,会根据gender修改的值输出cnGender。


http://www.ppmy.cn/embedded/40872.html

相关文章

MongoDB聚合运算符:$toHashedIndexKey

MongoDB聚合运算符:$toHashedIndexKey 文章目录 MongoDB聚合运算符:$toHashedIndexKey语法举例角度的双曲正切 $toHashedIndexKey计算并返回输入表达式的哈希值,其使用的哈希函数与MongoDB创建哈希索引相同。哈希函数将键值或字符串映射到固定…

【VUE.js】前端框架——未完成

基于脚手架创建前端工程 环境 当安装node.js时,它本身就携带有npm命令。(-v 查版本号)安装VUE CLI npm i vue/cli -g(全局) 创建 vue create 【project name】 镜像源解决方案 输入创建命令后,提示检查更…

Vue入门到关门之Vue3学习

一、常用API 注意:本文项目均使用脚手架为 Vite 1、setup函数 (1)介绍 如果在项目中使用配置项API,那么写起来就和vue2的写法是一样的;但是如果在项目中写的是组合式API,那么组件中所用到的&#xff1a…

【C语言/数据结构】栈:从概念到两种存储结构的实现

目录 一、栈的概念 二、栈的两种实现方式 1.顺序表实现栈 2.链表实现栈 三、栈的顺序存储结构及其实现 1.栈的声明 2.栈的初始化 3.栈的销毁 4.栈的压栈 5.栈的弹栈 6.栈的判空 7.返回栈顶元素 8.返回栈的长度 四、栈的链式存储结构及其实现 1.栈的声明 2.栈的…

【数据结构】堆(Heap)

文章目录 一、堆的概念及结构二、堆的实现1.向上调整算法2.向下调整算法3.堆的创建4.堆的插入5.堆的删除6.堆的其他操作 三、堆的应用1.堆排序2.Top-K问题 一、堆的概念及结构 堆(Heap)是一种特殊的非线性结构。堆中的元素是按完全二叉树的顺序存储方式存储在数组 中。满足任意…

252 基于MATLAB的自适应差分阈值法检测心电信号的QRS波

基于MATLAB的自适应差分阈值法检测心电信号的QRS波,QRS波群反映左、右心室除极电位和时间的变化,第一个向下的波为Q波,向上的波为R波,接着向下的波是S波。通过GUI进行数据处理,展示心率和QRS。程序已调通,可…

mybatis-plus(2)

上文我们介绍完mybatis-plus的常用注解,现在介绍 mp的基础的yaml配置 mybatis-plus:type-aliases-package: #该位置写 数据库对应实体类的全路径global-config:db-config:id-type: auto # 全局id类型为自增长 mp同时也是支持手写sql,而且mapper的读取地…

3.使用uView让tabbar更优雅

文章目录 1. 使用uView让tabbar更优雅1.1. 怎么才优雅?1.2. uView的tabbar合适吗?1.3. 引入项目过程1.3.1. 修改pages.json1.3.2. 把demo里面的pages先拷贝过来1.3.3. 引入tabbar的图片1.3.4. 运行 1.4. 我们自己的项目适配 1. 使用uView让tabbar更优雅 …