this

用自然语言的角度理解JavaScript中的this关键字:http://blog.leapoahead.com/2015/08/31/understanding-js-this-keyword/

 

使用Function.prototype.bind把function绑定到某个对象:
//每个函数都有一个bind方法:Function.prototype.bind
xiaoming.run = xiaoming.run.bind(xiaoming);
多次bind之后,this对象是第一次绑定的obj;
使用call和apply也是可以的;
call/apply 和 bind避免混用;
严格模式下,调用方法没有主语,this为undefined

 

没法看到定义的函数是被谁调用的:

window.val = 'window val';

var obj = {
  val: 'obj val',
  foo: function() {
    $('#text').bind('click', function() {
    //this为$('#text') console.log(this.val); }); } }; obj.foo();

想要在上面的回调函数里面使用obj的val值,除了直接写obj.val之外,还可以在foo方法中用一个新的变量that来保存foo运行时this的值:

window.val = 'window val';

var obj = {
  val: 'obj val',
  foo: function() {
    var that = this; // 保存this的引用到that,这里的this实际上就是obj
    $('#text').bind('click', function() {
      console.log(that.val); // 输出:obj val
    });
  }
};

obj.foo();

另外一种方法就是为该匿名函数bind:

window.val = 'window val';

var obj = {
  val: 'obj val',
  foo: function() {
    $('#text').bind('click', function() {
      console.log(this.val); // 输出:obj val
    }.bind(this));
  }
};

obj.foo();

  

  

 

 

 

 

  

 

posted on 2015-09-01 23:46  j.w  阅读(144)  评论(0编辑  收藏  举报