我是靠谱客的博主 体贴奇迹,最近开发中收集的这篇文章主要介绍今天大雪,可是一点雪都没看到,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

 this指向

        1 全局变量

          2 dom对象上的方法

          3 dom事件的回调函数

          4 定时器

          5 构造函数

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<button>点击</button>
<body>
<script>
/*
1 全局变量
2 dom对象上的方法
3 dom事件的回调函数
4 定时器
5 构造函数
*/
console.log(this)
//window
const obj = {
name: '张三',
getNum() {
//函数内部的this 是调用这个函数时自动产生的变量 谁调用这个方法就指向谁
console.log(this);
//obj
}
}
obj.getNum()
//dom对象上的回调函数
document.querySelector('button').addEventListener('click', function () {
console.log(this);
//指向button 点击之后系统自动生成 不需要调用
})
//定时器
setTimeout(function () {
console.log(this);
//window
}, 1000)
//构造函数
let that
function Men() {
console.log(this)
//this值指向通过这个构造函数实例出来的实例化对象
that = this
}
const m1 = new Men()
console.log(that === m1);
</script>
</body>
</html>

箭头函数

 在箭头函数内部是没有this指向的,箭头函数内部的this指向也遵循就近原则,因为箭头函数内部没有this,所以里面的this指向上一级作用域,如果上一级作用域也没有就去上上一级寻找.

call   bind   apply

上面我们了解到所有函数内部的this指向,this指向是固定的,那如果想要this指向其他的作用域,就可以使用上面的三个方法

call  apply方法

 <script>
//call 参数要绑定的this值 参数1,参数2....
//apply 参数要绑定this值 [参数1 参数2]
//两个都是立即执行
const obj = {
name: '景天',
age: 27
}
function fn(x, y) {
console.log(this, 1, 2);
}
fn.call(obj, 1, 2)
fn.apply(obj, [1, 2])
</script>

bind方法 


<script>
//bind 参数(this值指向,参数1,参数2,.....)
它返回的是一个经过bind处理之后的新函数不会立即调用这个函数
const p = {
address: '蜀山'
}
function fn() {
console.log(this);
}
fn.bind(p)
//这样不会输出任何内容
console.log(fn.bind(p)) //输出的是经过bind处理之后的新函数
</script>

上面分别使用简单的代码说明了一下三种方法的使用,但是可能很多人还是不清楚三种的区别

共同点:1 都是用来修改函数的this指向   2.第一个参数都是this要指向的对象  3.都可以利用后续参数传参

不同点: call方法的作用和apply方法类似, 区别在于call方法接收的的参数列表, apply方法接收的是一个参数数组,bind方法创建了一个新的函数,当这个新的函数被调用时,其this值为提供的值,他的参数列表前几项,值为创建时指定的参数序列

最后

以上就是体贴奇迹为你收集整理的今天大雪,可是一点雪都没看到的全部内容,希望文章能够帮你解决今天大雪,可是一点雪都没看到所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部