ic_man

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

  为了深入学习ECMAScript5,在网上查看了很多的相关文档。其中几篇是关于ES5新增函数bind,所以今天整理一下,以备查阅。

    function(){}.bind(thisArg [,arg1 [,arg2 ....]]) :翻译成中文的话:函数:bind(this上下文参数,普通参数1,普通参数2,普通参数3);

    不说了,直接贴代码:

        var obj  = {
            a     :1,
            b     :2,
            getSum:function(){
                return this.a+this.b
            }
        };
        var test = {
            a:10,
            b:20
        };
        var a    = 4, b = 5;
        console.log(obj.getSum());                //输出3:

        var getSum = obj.getSum;
        console.log(getSum());                    //输出9:

        var getSum2 = obj.getSum.bind(obj);         // bind将函数的上下文指定为obj,所以a=1,b=2。
        console.log(getSum2());                     //输出3:

        var getSum3 = obj.getSum.bind(this);     // bind将函数的上下文指定为window,所以a=4,b=5。
        console.log(getSum3());                     //输出9:

        console.log(obj.getSum.call(test));      //输出30:call将getSum在test对象的上下文中执行,结果会返回test中的a,b值相加。

        console.log(getSum2.call(test));          //输出3:bind绑定了obj对象的上下文,不会被call所影响
        

    如果在函数中使用setTimeout或者setInterval全局函数。

    var a    = 4, b = 5;
        var test = {
            a:10,
            b:20
        };
        var obj  = {
            a      :1,
            b      :2,
            showSum:function(){
                setTimeout(this.getSum, 1000);  //指向window
                setTimeout(this.getSum.bind(this), 1000); //指向obj对象
            },
            getSum :function(){
                console.log(this);
                console.log(this.a+this.b);
            }
        };
        obj.showSum(); // this -- window    a+b --- 9     setTimeout的作用域指向window: This -- window。

 

    

posted on 2017-06-05 16:20  ic_man  阅读(170)  评论(0)    收藏  举报