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);
  • 相关阅读:
    Eclipse Java开发环境配置 + memcached + maven
    sqlserver数据库自动备份
    从表A中选择部分字段插入到表B
    电信IOT平台关于产品profile插件的添加流程
    SQLServer查询耗时sql语句
    net core 包管理
    byte[] 截串操作
    关于kafka启动失败问题
    springboot 搭建maven项目
    C# MongoDB学习之路(一)
  • 原文地址:https://www.cnblogs.com/hughman/p/6816701.html
Copyright © 2011-2022 走看看