关于bind、call以及apply

mac2022-06-30  30

call以及apply的用法     1、调用函数     function foo(n){         console.log(n);     }     foo(1);     foo.call(null,2);     foo.apply(null,[3]);     2、改变所调用的函数的内部的this值的指向     var a=1;        function foo(b){            console.log(this.a+b);        }        foo(2);        foo.call({a:3},4);        foo.apply({a:5},[6]);        3、借用其他对象的方法        var arr=[12,34,6,32,12,43];        var ret=Math.max.apply(null,arr);        console.log(ret);     4、把类数组转换成数组     var obj={0:'1',1:'2',length:2};     var ret=[].slice.call(obj);     console.log(ret);      
关于slice的用法     var arr=[12,23,45,87];     var arr1=arr.slice(0,2);     console.log(arr1);     var arr2=[23,56,76];     var ret=arr.slice.call(arr2,0,2);     console.log(ret);     var rets=[].slice.call(arr2,0,2);     console.log(rets);     var retss=Array.prototype.slice.call(arr2,0,2);     console.log(retss);  
      关于push的用法     var arr=[];     arr.push('hello');     [].push.call(arr,'hi');     [].push.apply(arr,['ni','hao']);     console.log(arr);     bind方法的使用     bind是ES5的新特性,作用是改变函数内部的this指向     bind本身不会调用函数,仅仅会改变函数内部的this指向,并且返回一个新的函数(新函数唯一的变化就是this变了,编成了bind的第一个参数)     var a=1;     var b=2;     function foo (c) {         console.log(this.a+this.b+c);     }     foo(1);     var fn=foo.bind({         a:3,         b:4     },1);     fn();  
      什么时候需求使用bind     var obj={         a:1,         b:2     };     setTimeout((function(){         console.log(this.a+this.b);     }).bind(obj),1000);           var fn=(function(){         console.log(this.a+this.b);     }).bind(obj);     setTimeout(fn,1000);           setTimeout((function(){         return (function(){             console.log(this.a+this.b);         }).bind(obj);            })(),1000);

转载于:https://www.cnblogs.com/hughman/p/6816701.html

最新回复(0)