1.bind 改变了函数内部this执行的上文环境


  1. <script>
  2. /* 改变函数内部的this关键字的指向 */
  3. var name ="cheng";
  4. var obj ={
  5. name:"li"
  6. }
  7. /* bind()改变了函数内部this执行的上文环境 */
  8. var test = function(){
  9. console.log(this.name)
  10. }.bind(obj);
  11. test() //li
  12. </script>

2.call 改变函数this的指向,函数调用的时候执行


  1. <script>
  2. /* call改变函数this的指向,函数调用的时候执行 */
  3. var li ="li";
  4. var obj = {
  5. name:"cheng"
  6. }
  7. var test = function(){
  8. console.log(this.name)
  9. }
  10. test.call(obj) //cheng
  11. </script>
  12. <script>
  13. /* call(thisObj,params) */
  14. function sayName(label){
  15. console.log(label+":"+this.name)
  16. }
  17. var name ="window";
  18. var cheng = {
  19. name:"cheng"
  20. }
  21. var wang = {
  22. name:"wang"
  23. }
  24. sayName("window") //window:window
  25. sayName.call(cheng,"chengchao") //chengchao:cheng
  26. sayName.call(wang,"女孩子") //女孩子:wang
  27. </script>

3.apply 改变函数this的指向,函数调用的时候执行


  1. <script>
  2. function go(name,age){
  3. console.log(this.name+":"+this.age)
  4. console.log(name)
  5. console.log(age)
  6. }
  7. var li = {
  8. name:"李梦瑶",
  9. age:23
  10. }
  11. var zhang = {
  12. name:"张三丰",
  13. age:100
  14. }
  15. go.apply(li,["li",24]) //传的是数组
  16. go.call(zhang,"zhang",111) //一个一个的传参
  17. </script>