zoukankan      html  css  js  c++  java
  • 关于bind、call以及apply

    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);
  • 相关阅读:
    centos下 yum安装ngix
    [转]ORACLE函数大全
    Oracle的DML语言必备基础知识
    微信公众账号开发教程
    freemarker页面如何获取绝对路径basePath
    使用intellij的svn时提示出错: Can't use Subversion command line client: svn.Errors found while svn working copies detection.
    网站地址
    如何让tomcat不记录catalina.out这个日志文件
    在centos6.7用yum安装redis解决办法
    剑指 Offer 06. 从尾到头打印链表
  • 原文地址:https://www.cnblogs.com/hughman/p/6816701.html
Copyright © 2011-2022 走看看