小言_互联网的博客

js函数之call和apply

294人阅读  评论(0)

一、含义


  
  1. function test( ) {
  2. console. log( '----')
  3. }
  4. //执行
  5. test();
  6. test. call()

        结果一致,调用test()默认会调用call,二者效果一致,call省略掉了。

二、改变this指向

        call还有一个很重要的功能是改变this的指向。


  
  1. function Car( brand, color) {
  2. this. brand = brand;
  3. this. color = color;
  4. this. run = function ( ) {
  5. console. log( 'run 方法')
  6. }
  7. }
  8. let newCar = {
  9. age: 30
  10. }

1、不用 call

console.log('newCar', newCar)

打印结果:{}

2、使用 call

//参数1:对象,参数2,3,4……:其他参数
Car.call(newCar, '兰博基尼', 'red')
console.log('newCar', newCar)

打印结果:

{
   "brand": "兰博基尼",
   "color": "red"
}

        可以看出改变了this 的指向,和apply的区别是后面是一个数组,其他没啥区别,均可以改变this 指向Car.apply(newCar, ['兰博基尼', 'red'])。

三、应用


  
  1. function Compute( ) {
  2. this. plus = function ( a, b) {
  3. console. log(a + b)
  4. }
  5. this. minus = function ( a, b) {
  6. console. log(a - b)
  7. }
  8. }
  9. function FullCompute( ) {
  10. Compute. apply( this)
  11. this. mul = function ( a, b) {
  12. console. log(a * b)
  13. }
  14. this. div = function ( a, b) {
  15. console. log(a / b)
  16. }
  17. }
  18. const compute = new FullCompute();
  19. compute. plus( 1, 1);
  20. compute. minus( 1, 1);
  21. compute. mul( 1, 1);
  22. compute. div( 1, 1);

打印结果:

四、全局this和函数this

        全局定义的this和函数内部定义的 this 相当于 window,例如:


  
  1. function test( ) {
  2. this. a = 1;
  3. let b = 2
  4. }
  5. test();
  6. console. log(a); // 1
  7. console. log(b); // b is not defined


转载:https://blog.csdn.net/yoonerloop/article/details/128512242
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场