2013-10-07 75 views
1

因此,下面是一個非常簡單的例子,我將that設置爲this,因此我可以使用myObj的範圍。我將如何整合Function.prototype.bind,以便我可以看到未來如何使用它?將JavaScript的.bind()與回調函數集成在一起

var myObj = { 

     specialFunction: function() { 

     }, 

     anotherSpecialFunction(){ 

     }, 

     getAsyncData: function (cb) { 
      // an operation 
      cb(); 
     }, 

     render: function() { 
      var that = this; 
      this.getAsyncData(function() { 
       that.specialFunction(); 
       that.anotherSpecialFunction(); 
      }); 
     } 
    }; 

    myObj.render(); 
+0

''''會給你''render'函數的範圍,而不是'myObj' – Vandesh

+0

@Vandesh我不認爲你就在那裏...... – benhowdle89

+0

getAsyncData'定義在哪裏?它假設是myObj.getAsyncData? – Musa

回答

2

只需使用你想要的方式綁定並指定上下文

render: function() { 
    this.getAsyncData(this.specialFunction.bind(this)); 
} 

render: function() { 
     this.getAsyncData(someFunction.bind(this)); 
     function someFunction() { 
      this.specialFunction(); 
      this.anotherSpecialFunction(); 
     } 
    } 
+0

這很酷。也許我做得太麻煩了。我編輯它以反映我在現實生活用例中更可能做的事情。 – benhowdle89

+0

@ benhowdle89請參閱更新 – Musa

0

如果你想this仍然參考myObj傳遞給getAsyncData你」的回調函數內d想讓你的render功能看起來像這樣:

render: function() { 
    this.getAsyncData((function() { 
     this.specialFunction(); 
     this.anotherSpecialFunction(); 
    }).bind(this)); 
} 
1

我將如何整合Function.prototype.bind

省略that,使用this而不是和功能綁定到實例:

… 
    render: function() { 
     this.getAsyncData(function() { 
      this.specialFunction(); 
      this.anotherSpecialFunction(); 
     }.bind(this)); 
    } 
… 

只是這樣我就可以看到我可以在將來使用它?

您可以立即使用它。每個體面的瀏覽器都支持它,如果你真的關心舊的Internet Explorers等,你可以shim it