博客
关于我
this指向和bind—call—apply
阅读量:704 次
发布时间:2019-03-15

本文共 2327 字,大约阅读时间需要 7 分钟。

this和bind&&call&&apply

this 关键字

  • 每一个函数内部都有一个关键字是 this

  • 可以让我们直接使用的

  • 重点: 函数内部的 this 只和函数的调用方式有关系,和函数的定义方式没有关系

  • 函数内部的 this 指向谁,取决于函数的调用方式

  • 全局定义的函数直接调用,this => window

  • 对象内部的方法调用,this => 调用者

  • 定时器的处理函数,this => window

  • 事件处理函数,this => 事件源

  • 自调用函数,this => window

call 和 apply 和 bind

  • 刚才我们说过的都是函数的基本调用方式里面的 this 指向

  • 我们还有三个可以忽略函数本身的 this 指向转而指向别的地方

  • 这三个方法就是 call / apply / bind

  • 是强行改变 this 指向的方法

call

  • call 方法是附加在函数调用后面使用,可以忽略函数本身的 this 指向

  • 语法: 函数名.call(要改变的 this 指向,要给函数传递的参数1,要给函数传递的参数2, ...)

var obj = {    name: 'fqniu' }function fn(a, b) {     console.log(this)  console.log(a)  console.log(b)}fn(1, 2)fn.call(obj, 1, 2)
  • fn() 的时候,函数内部的 this 指向 window
  • fn.call(obj, 1, 2) 的时候,函数内部的 this 就指向了 obj 这个对象
  • 使用 call 方法的时候
    • 会立即执行函数
    • 第一个参数是你要改变的函数内部的 this 指向
    • 第二个参数开始,依次是向函数传递参数

apply

  • apply 方法是附加在函数调用后面使用,可以忽略函数本身的 this 指向

  • 语法: 函数名.apply(要改变的 this 指向,[要给函数传递的参数1, 要给函数传递的参数2, ...])

var obj = {    name: 'fqniu' }function fn(a, b) {     console.log(this)  console.log(a)  console.log(b)}fn(1, 2)fn.apply(obj, [1, 2])
  • fn() 的时候,函数内部的 this 指向 window
  • fn.apply(obj, [1, 2]) 的时候,函数内部的 this 就指向了 obj 这个对象
  • 使用 apply 方法的时候
    • 会立即执行函数
    • 第一个参数是你要改变的函数内部的 this 指向
    • 第二个参数是一个 数组,数组里面的每一项依次是向函数传递的参数

bind

  • bind 方法是附加在函数调用后面使用,可以忽略函数本身的 this 指向

  • 和 call / apply 有一些不一样,就是不会立即执行函数,而是返回一个已经改变了 this 指向的函数

  • 语法: var newFn = 函数名.bind(要改变的 this 指向); newFn(传递参数)

var obj = {    name: 'fqniu' }function fn(a, b) {     console.log(this)  console.log(a)  console.log(b)}fn(1, 2)var newFn = fn.bind(obj)newFn(1, 2)
  • bind 调用的时候,不会执行 fn 这个函数,而是返回一个新的函数
  • 这个新的函数就是一个改变了 this 指向以后的 fn 函数
  • fn(1, 2) 的时候 this 指向 window
  • newFn(1, 2) 的时候执行的是一个和 fn 一模一样的函数,只不过里面的 this 指向改成了 obj

转载地址:http://xdomz.baihongyu.com/

你可能感兴趣的文章
Objective-C实现Miller-Rabin素性测试程序(附完整源码)
查看>>
Objective-C实现min cost string conversion最低成本字符串转换算法(附完整源码)
查看>>
Objective-C实现MinhashLSH算法(附完整源码)
查看>>
Objective-C实现MinhashLSH算法(附完整源码)
查看>>
Objective-C实现MinHeap最小堆算法(附完整源码)
查看>>
Objective-C实现minimum coin change最小硬币找零算法(附完整源码)
查看>>
Objective-C实现minimum cut最小切割流算法(附完整源码)
查看>>
Objective-C实现minimum partition最小分区算法(附完整源码)
查看>>
Objective-C实现Minimum Priority Queu最小优先级队列算法(附完整源码)
查看>>
Objective-C实现Minimum Vertex Cover最小顶点覆盖算法(附完整源码)
查看>>
Objective-C实现MinimumCostPath最小成本路径算法(附完整源码)
查看>>
Objective-C实现min_heap最小堆算法(附完整源码)
查看>>
Objective-C实现mobius function莫比乌斯函数算法(附完整源码)
查看>>
Objective-C实现modular Binary Exponentiation模二进制指数算法 (附完整源码)
查看>>
Objective-C实现modular exponential模指数算法(附完整源码)
查看>>
Objective-C实现monte carlo dice蒙特卡洛骰子模拟算法(附完整源码)
查看>>
Objective-C实现monte carlo蒙特卡罗算法(附完整源码)
查看>>
Objective-C实现Mosaic Augmentation马赛克增强算法(附完整源码)
查看>>
Objective-C实现msd 基数排序算法(附完整源码)
查看>>
Objective-C实现MSRCR算法(附完整源码)
查看>>