ES5函数新增的方法(call、apply、bind)

1.call()的使用
<script type="text/javascript"> var obj1 = { name:'bob', fn:function(){ console.log(this); //对象本身{name: "bob", fn: ƒ} console.log(this.name); //bob } } obj1.fn(); var obj2 = { name:'call调用obj1的方法' } obj1.fn.call(obj2);//this--->{name: "call调用obj1的方法"} 相当于obj2.name; obj1.fn.call(this); //指向window指向全局作用域 obj1.fn.call(window); //指向window //call传递的第一个参数是this指向需要改变的对象,其实就是改变了函数调用时this指向,this指向第一个参数,第二个参数为传给该函数的实参(用逗号隔开) </script>
2.apply 和 call 的区别
<script type="text/javascript"> var num = 0; var obj1 ={ num:1, fn:function(a,b){ console.log(this) //{num: 2} console.log(this.num) //2 console.log(a+b) //1020 } } var obj2 = { num:2 } obj1.fn.call(obj2,'10','20'); obj1.fn.apply(obj2,['10','20']); //call和apply都能进行函数的调用,传参方式不一样call一般参数明确用逗号隔开,apply一般为参数不明确,参数以数组方式 </script>
3.找出数组的最大数(传统)
<script type="text/javascript"> var arr = [1,2,3,4,10]; var num =0; for (var i=0;i<arr.length;i++) { if(num<arr[i]){ num = arr[i] } } console.log(num) </script>
4.用 apply 找出数组的最大值和最小值
<script type="text/javascript"> var arr = [1,2,3,4,10]; var maxNum = Math.max.apply(window,arr); var minNum = Math.min.apply(null,arr); console.log(maxNum);//10 console.log(minNum);// 1 </script>
5.bind 的使用
<script type="text/javascript"> var num = 6; var obj1 = { num: 10, fn: function(x, y) { return this.num + x + y; } } var obj2 = { num: 8 } var a = obj1.fn.bind(this, 1, 2)(); //改变函数调用时this指向,此时this是window; console.log(a)//9 </script>
原文地址:https://www.cnblogs.com/lhl66/p/8854138.html