js中bind方法的灵活性

2018-04-23  本文已影响9人  周紫一
var x = 100;

var module = {
    x:42,
    getX: function(){
        return this.x;
    }
}

var retrieveX = module.getX
console.log(module.getX)                //ƒ (){return this.x;}      
console.log(retrieveX)                  //ƒ (){return this.x;}      
console.log(retrieveX())                //100,因为此时retrieveX中的this指向的全局,所以打印出全局变量中的x
var boundGetX = retrieveX.bind(module)  //将函数retrieveX绑到对象module上,此时retrieveX中的this指的是module
console.log(boundGetX())                //42,原因上一句解释了哦

////////////再理解/////////////
var printX = function(){
    return this.x;
}
var printXObj = printX.bind(module);
console.log(printXObj());

Function.prototype.bind,
Function.prototype.call,
Function.prototype.apply,
此三者只有一个作用,改变函数中的this指向,

区别:

call,apply基本没什么区别只是传参方式略有不同,call以多个参数的形式,apply以一个数组的形式

1、bind方法将指定Function绑到指定对象后生成一个新的Function,并且新生成的这个Function不会立即执行,只有在调用的时候执行。
2、call,apply绑定和执行是同时进行的
总:bind更加灵活,

上一篇下一篇

猜你喜欢

热点阅读