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 只能跟一个参数、那就是一个数组。