bind

bind

var obj = {
    a: 1,
    foo: function f() {
        console.log(this.a);        
    }
}

obj.foo(); //1

var g = obj.foo;
g();    //undefined

g = obj.foo.bind(obj);
g();    //1

g.applay(obj) // 1
g.call(obj) //1
函数foo在非严格模式下如果没有明确绑定对象,则会绑定到全局对象,所以输出undefined
。在严格模式下则会报错。

为什么obj.foo()
 可以正确输出呢?原因在于这种调用方式会[隐式绑定](https://github.com/getify/You-Dont-Know-JS/blob/master/this%20&%20object%20prototypes/ch2.md)到执行这个方法的对象上(obj)。

call 和applay

function xxx(a,b,c){
  console.log(a);
  console.log(b);
  console.log(c);
  console.log(this)
}
xxx.applay(obj,[1,2,3])
xxx.call(obj,1,2,3,)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容