javascript改变this指向方法详解

改变this指向有三种方法:call apply bind

call和apply的区别是apply是以数组形式改变,bind是和call类似,只不过是在后面加();

var m = 3000;
    var obj = {
        name:'王五',
        m:this.m, 
        state:function(a,b){
            console.log(`${this.name}的长度是${this.m}而${a}的宽度是${b}`)//而a的宽度undefined
        }
    }
    //  obj.state.fn();
        var skarr={
        name:'老刘',
        m:40,
    }

    obj.state()
     obj.state.call(skarr,'张三',123)//此时this的指向为老刘的长度是40而张三的宽度是123
  

如果是换成apply的话,那这个call换成apply时张三,123就必须以数组的形式展现出来;
eg:

obj.state.apply(skarr,[张三,123]);//此时结果和call一样;

   obj.state.bind(skarr,'张三',123)();

三种结果都一样,只不过区别不同而已;

大家看完之后可以尝试一下啊

你可能感兴趣的:(javascript改变this指向方法详解)