call 和apply 的区别及其、函数中this 的指向

window.color = 'red'
   var a = { color: 'blue' }
   function colorLog () {
     console.log(this.color);
     console.log(arg);
   }
   colorLog() // red 
   colorLog.call(window); // red
   colorLog.call(a); // blue

1.看下上述代码打印的结果、首先看第一个打印的为什么是red、
(我起初的理解函数中的this指向的应该是这个函数、 ) 函数中的this 指向的 函数的调用方。
这里是在window中调用的、第一个值就可以理解了、
2.在函数中使用了call 的方法、说一下call 的使用、通俗一点 改变this指向、上面函数只传了一个参数。
就拿只有一个参数的时候来讲。第一个值 就是定义函数里面this的指向
传了一个window 对象 指向的就是 就是window
3.第三个函数 调用的值 就不言而喻了 里面的传的是对象a 打印的值就是a对象里面的值、blue

```javascript
window.color = 'red'
   var a = { color: 'blue' }
   function colorLog (...arg) {
     console.log(arg);
   }
   colorLog() //  
   colorLog.call(window, 1); // [1]
   colorLog.call(a, 3, 4, 5, 6, 7); // [3,4,5,6,7]

4.在call 方法中 第一个是需要给函数内部this赋的值 后面是多个参数(这里的多个是泛指也可以是一个)后面的参数就是给函数中形参赋的值、和普通函数赋值一个样子、

window.color = 'red'
   var a = { color: 'blue' }
   function colorLog (...arg) {
     console.log(arg);
   }
   colorLog() //  
   colorLog.apply(window, [1,2]); // [1,2]
   colorLog.apply(a, [3, 4, 5, 6, 7]); // [3,4,5,6,7]

5. 上面是使用apply的方法、只能有两个参数 第一个参数和call方法中一样、是需要给函数内部this赋的值。第二个参数必须是一个数组、如果是其他控制台会给你一串红字、
6.两者的异同 相同点都是改变this的指向 也就是第一个参数 要表达的意思、
不同点是第一个参数后面跟的参数 call 可以跟多个参数、而apply 只能跟一个参数、那就是一个数组

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值