SHARE
TWEET

Untitled

a guest Aug 17th, 2019 60 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 相同点:三者都可以改变 this 的指向
  2.  
  3. 不同点:
  4.  
  5. - apply 方法传入两个参数:一个是作为函数上下文的对象,另外一个是作为函数参数所组成的数组
  6. ```p
  7. var obj = {
  8.     name : 'sss'
  9. }
  10.  
  11. function func(firstName, lastName){
  12.     console.log(firstName + ' ' + this.name + ' ' + lastName);
  13. }
  14.  
  15. func.apply(obj, ['A', 'B']);    // A sss B
  16. call 方法第一个参数也是作为函数上下文的对象,但是后面传入的是一个参数列表,而不是单个数组
  17. var obj = {
  18.     name: 'sss'
  19. }
  20.  
  21. function func(firstName, lastName) {
  22.     console.log(firstName + ' ' + this.name + ' ' + lastName);
  23. }
  24.  
  25. func.call(obj, 'C', 'D');       // C sss D
  26.  
  27. ```
  28. - bind 接受的参数有两部分,第一个参数是是作为函数上下文的对象,第二部分参数是个列表,可以接受多个参数
  29.  
  30. ```p
  31. var obj = {
  32.     name: 'sss'
  33. }
  34.  
  35. function func() {
  36.     console.log(this.name);
  37. }
  38.  
  39. var func1 = func.bind(null, 'xixi');
  40. func1();
  41. ```
  42. apply、call 方法都会使函数立即执行,因此它们也可以用来调用函数
  43.  
  44. bind 方法不会立即执行,而是返回一个改变了上下文 this 后的函数。而原函数 func 中的 this 并没有被改变,依旧指向全局对象 window
  45.  
  46. bind 在传递参数的时候会将自己带过去的参数排在原函数参数之前
  47. ```p
  48. function func(a, b, c) {
  49.     console.log(a, b, c);
  50. }
  51. var func1 = func.bind(this, 'xixi');
  52. func1(1,2) // xixi 1 2
  53.  
  54. ```
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top