Advertisement
Guest User

Untitled

a guest
Aug 17th, 2019
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.41 KB | None | 0 0
  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. ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement