练习题3_手动实现bind.html 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. </head>
  8. <body>
  9. <script>
  10. //10、用call 或 apply 实现bind 方法
  11. function foo(str1,str2) {
  12. console.log(this.a,str1,str2)
  13. }
  14. var obj = {
  15. a: "hello"
  16. }
  17. // foo.bind(obj);
  18. // 实现代码
  19. Function.prototype.bind2 = function(){
  20. // console.log(this);
  21. var _obj = arguments[0];
  22. // var p1 = arguments[1];
  23. // var p2 = arguments[2];
  24. // console.log(Array.from(arguments))
  25. var pArr = Array.prototype.slice.call(arguments,1);
  26. // console.log(pArr);
  27. // console.log(arguments);
  28. var that = this;
  29. return function(){
  30. // console.log(that)
  31. that.apply(_obj,pArr)
  32. }
  33. }
  34. var obj1 = {
  35. a:"world"
  36. }
  37. // 执行
  38. var foo2 = foo.bind2(obj1,"love","coding");
  39. foo2()//hello
  40. // function foo3(){
  41. // console.log(this.a)
  42. // }
  43. // var foo4 = foo3.bind2(obj);
  44. // foo4();
  45. var arr = ["obj",'a','b','c','d'];
  46. var arr1 = arr.slice(1);
  47. // console.log(arr1);
  48. </script>
  49. </body>
  50. </html>