JS——this

Q&A:

1. apply、call 有什么作用,什么区别?

  • apply
  • 定义fun.apply(thisArg[, argsArray]),改变当前函数的this指向,这样可以使方法在特定对象中使用,而不需要再特定对象中重新写该方法。
  • 参数
    • 第一个参数thisArg是this的指向,即要指定的调用对象,非严格模式下,当为null或undefined时,默认指向全局对象;
    • 第二个参数argsArray是参数数组,在ES5中,可以为类数组对象。该数组传给fun函数以供处理;当无法得知具体有何参数时,可以使用arguments对象代替argsArray;当设置为null或undefined时,表示不需要传入参数。
  • egArray.prototype.join.apply(arguments),让arguments可以使用join方法;补充一点,argument.callee常用于匿名函数,指代函数本身。
  • callfun.call(thisArg[, arg1[, arg2[, ...]]]),与apply作用相同。
  • 区别:call和apply类似,只有第二个参数不同,apply是传入参数数组或者类数组对象,而call是传入参数列表(nodeList)。
  • this:当函数被调用时,this指向调用函数的那个对象。
  • 全局作用下,this指向window对象;
  • 构造函数的this指向构造的对象;
  • apply和call里,指向指定的调用对象;
  • 事件绑定中的this,指向调用事件绑定的document对象;
  • 函数嵌套中的function的this指向window;
  • setTimeout和setInterval中的this指向window;
  • eg:


  
    
    task33
  
  
    
    
  

JS——this_第1张图片
this指向
    
JS——this_第2张图片
apply中的this

Coding:

1. 以下代码输出什么?

    

this指向调用其函数的对象,代码中john对象绑定函数,并且调用函数,所以this指向john对象,所以显示john: H1!

JS——this_第3张图片
代码1

2. 下面代码输出什么,为什么

    

默认是全局对象调用函数,所以显示的是window对象:


JS——this_第4张图片
代码2

3. 下面代码输出什么

    

嵌套函数,在调用的时候,和外层函数一样,也遵循堆栈溢出原则,函数调用时this指向仍然是window;document绑定事件时,this指向document对象,因为调用该方法的是document对象;setTimeout是全局对象window调用的,所以this指向window:


JS——this_第5张图片
代码3

4. 下面代码输出什么,why

    

call方法的第一个参数是改变调用该方法的this对象,所以显示John:


JS——this_第6张图片
代码4

5. 代码输出?

    

call方法,第一个参数是改变调用该方法的this对象,后面的参数是传入的参数,this[a]得到的就是john[firstName]的值:


JS——this_第7张图片
代码4

6. 以下代码有什么问题,如何修改

    

this只有在函数被调用的时候才能应用,当$btn被点击时,this指向$btn而不是module,所以在bind里调用不了showMsg()方法,应该改成:



  
    
    task33
  
  
    
    
    
  

代码6

本文归饥人谷和本人所有,如需转载请注明来源

你可能感兴趣的:(JS——this)