为了深入学习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 阅读( ...) 评论( ...)