IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    關於JavaScript中callback函數的this指針重定義

    小鳥遊死月发表于 2015-06-10 03:29:48
    love 0

      最近在寫 NBUT Virtual Judge 的內核框架,用的又是 Node.JS 了,把它當作一個本地運行的腳本不斷進行輪詢。

      衆所周知JS中的一個精髓就是異步回調。

      所以在我自己寫的框架中也經常會出現類似於下面的代碼:

    1
    foo.bar(a, b, function(){});

      總而言之就是寫一個函數,這個函數將會調用一個回調函數。

      但是問題出現了:在那個回調函數 function 中,你如果使用了一個 this 指針的話,它將會指向根,而不是 foo 的本體。

      那麼如果我們想在 function 中也用 this 來指代這個 foo 對象該怎麼辦呢?

      結果還是IRC有用。本人跑 Node.JS 的 IRC 上問了這個問題,結果有人就這樣回覆我了:

    13:07 xadillax: foo(a, b callback.bind(foo))

    13:10 foo (a, b fn) { fn = fn.bind(this); …. }

      然後還很熱心地給了我個網址:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

      總之最後得出的結論就是說:

      你只要給你的 callback 函數指定一個 this 指針即可。

      如:

    1
    2
    var cb = callback.bind(foo);
    foo.bar(a, b, cb);

      這樣就能在回調函數中使用foo來作爲其this指針了。



沪ICP备19023445号-2号
友情链接