0
点赞
收藏
分享

微信扫一扫

Java 基础进阶篇(九)—— Java集合详细总结

践行数据分析 2023-05-08 阅读 105

目录

一、普通函数和箭头函数this 指向的区别

二、改变this指向的方法

1、call()方法

2、apply()方法

3、bind()方法

4、示例

三、总结


一、普通函数和箭头函数this 指向的区别

箭头函数的 this 与普通函数的区别,this 的指向问题_普通函数this_小草莓蹦蹦跳的博客-CSDN博客

二、改变this指向的方法

箭头函数不能改变this指向,只有普通function函数能改变this指向

1、call()方法

① 语法:函数.call(参数1,其他参数....可以是多个或者没有 )

② 作用 :调用并且执行函数,同时将函数的this指向,定义为指定的内容(参数1)

2、apply()方法

① 语法:函数.apply(参数1,参数2)

② 作用: 调用并且执行函数,同时将函数的this指向,定义为指定的内容(参数1)

③ 总结:call方法与apply方法,作用和效果都是完全一致的;

                不同在于对于原始函数的参数赋值方式;

3、bind()方法

① 语法:const 变量 = 函数.bind(参数1)

② 作用: 不是立即执行函数。生成一个新的函数,这个新的函数是改变this指向之后的新的函数

③ 总结: call 和 apply 都是立即执行函数

                bind 不是立即执行函数,是生成一个新的函数

4、示例

function fn(name, age, sex) {
console.log(name, age, sex, this)
}

// this指向是window
fn('小草莓', 18, '女') // 小草莓 18 女 Window 


// 改变this指向。call方法:this指向的obj1
let obj1 = {
name: '未知',
age: 16,
sex: '未知',
}
fn.call(obj1, '张三', 20, '男') // 张三 20 男 {name: "未知", age: 16, sex: "未知"}


// 改变this指向。apply方法:this指向的obj1
fn.apply(obj1, ['李四', 40, '不知道']) // 李四 40 不知道 {name: "未知", age: 16, sex: "未知"}


// bind方法,不是立即执行函数,而是定义生成一个新的函数
// 新生成的函数,this指向是参数1 是obj1
// 新生成的函数,形参是原始函数fn的形参
const fn2 = fn.bind(obj1)
fn2('王五', 100, '不详') // 王五 100 不详 {name: "未知", age: 16, sex: "未知"}

三、总结

1、箭头函数中的 this 是在声明中就定义好了的,而普通函数中的 this 则是在调用时定义好的。

2、基本上可以归为五类:

JavaScript 中的 this 用一句话来概括,就是在执行时确定的。从现象上来看,就是谁调用了某个方法,那么这个方法中的 this 指向谁。

3、下面是最常见的例子:

const obj = {
  sayThis: function() {
    console.log(this);
  }
};

obj.sayThis(); // obj
const globalSay = obj.sayThis;
globalSay(); // window 浏览器中的 global 对象

 把上面的例子改为箭头函数,结果完全不同:

const obj = {
  sayThis: () => {
    console.log(this);
  }
};

obj.sayThis(); // window 浏览器中的 global 对象
const globalSay = obj.sayThis;
globalSay(); // window 浏览器中的 global 对象

4、JavaScript 给我们提供了 apply/call/bind 三种方法来改变 this 的指向

举报

相关推荐

0 条评论