JAVAscript中的this指向和this指向的修改

JAVAscript中的this指向和this指向的修改

this 关键字

  1. 一般在函数中使用,表示哪个对象执行了当前函数。
  2. 每一个函数内部都有一个关键字是 this
  3. 函数内部的 this 只和函数的调用方式有关系,和函数的定义方式没有关系
  4. 函数内部的 this 指向谁,取决于函数的调用方式。

window

  1. JS中的顶层对象,所有的全局都属于window

对象(Object)

  1. 数据类型,描述了事物,可以有属性,可以有函数;如有函数,在执行了这个函数后,this才是当前对象。

函数

  1. 是载体,或作用域,其中的this表示当前函数在执行是的所属对象。

this指向

  1. 默认情况下,this是当前所在函数的执行对象。
  2. 没有明确隶属对象的函数,被直接执行,一般都是window
  3. 有所属兑现的函数,被执行,一般都是当前函数的所属对象(隐式绑定this)。
  4. 不管这个函数是谁的,有没有所属对象,只要作为参数传递,通过参数执行这个函数,一般情况下都是window:(隐式丢失)。
  5. new绑定:函数被执行后,函数内部的this会指向new出来的实例。
  6. 箭头函数、定时器、延时器内部没有 this,箭头函数的 this上下文的 this
  7. 注意:不是所有回调函数中的this都指向window---某些特殊情况下被系统修改。

修改this的指向

修改this指向的规则

this的内容必须是对象,如果不是强行转成对象,但依然符合之前数据类型的使用规则

为什么修改this指向

  1. 修正。
  2. 继承:利用this的指向,借用别的对象的方法。

方法

call方法

  1. 参数:一个或多个
    ①:一个参数:第一个参数是修改后this的指向。
    ②:多个参数:其他所有参数表示向函数中正常传参。
  2. 功能:修改原函数的this指向,切记:仅仅是在当前qpply执行的时候修改了
  3. 返回值:是原函数的返回值,没有修改原函数。
  4. 会立即执行函数。
var obj = { name: 'Jack' }
function fn(a, b) {
  console.log(this)
  console.log(a)
  console.log(b)
}
fn(1, 2)
fn.call(obj, 1, 2)//此时this指向obj

apply方法

  1. 参数:
    ①一个参数:第一个参数是修改之后this的指向。
    ②二个参数:第二个参数是一个数组,这个数组中所有的数据,被自动展开之后,传入原函数,可以省略。
  2. 功能:修改原函数的this指向切记:仅仅是在当前qpply执行的时候修改了
  3. 返回值:原函数的返回值,没有修改原函数。
  4. 会立即执行函数。
var obj = { name: 'Jack' }
function fn(a, b) {
  console.log(this)
  console.log(a)
  console.log(b)
}
fn(1, 2)
fn.apply(obj, [1, 2])//此时this指向obj

bind方法

  1. 参数:
    ①第一个参数:修改之后的this指向。
    ②多个参数:后面所有的参数都是向函数中正常传递的实参,可以省略,也可以传多个。
  2. 功能:修改this的指向,切记:仅仅是在当前qpply执行的时候修改了
  3. 返回值:修改了this之后的新函数,没有修改原函数。
var obj = { name: 'Jack' }
function fn(a, b) {
  console.log(this)
  console.log(a)
  console.log(b)
}
fn(1, 2)
var newFn = fn.bind(obj)//此时this的指向已经修改
// fn.bind(obj,1,2)()|| fn.bind(obj)(1,2)||newFn(1, 2)这三种方式都能执行bing方法修改this指向后的函数

方法的区别

  1. call和apply的区别是第一个参数以后的参数。
  2. call与apply和bind的区别:
    ①call和apply会自动执行,执行之后的返回值时原函数的返回值。
    ②bind执行之后,会得到一个新函数,如果需要,新函数需要手动执行。
  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值