<dfn id="w48us"></dfn><ul id="w48us"></ul>
  • <ul id="w48us"></ul>
  • <del id="w48us"></del>
    <ul id="w48us"></ul>
  • JavaScript中的prototype.bind()方法介紹

    時間:2024-09-24 07:57:38 JavaScript 我要投稿
    • 相關推薦

    有關JavaScript中的prototype.bind()方法介紹

      以前,你可能會直接設置self=this或者that=this等等,這樣做當然也能起作用,但是使用Function.prototype.bind()會更好,看上去也更專業。

      下面舉個簡單的例子:

      復制代碼 代碼如下:

      var myObj = {

      specialFunction: function () {

      },

      anotherSpecialFunction: function () {

      },

      getAsyncData: function (cb) {

      cb();

      },

      render: function () {

      var that = this;

      this.getAsyncData(function () {

      that.specialFunction();

      that.anotherSpecialFunction();

      });

      }

      };

      myObj.render();

      在這個例子中,為了保持myObj上下文,設置了一個變量that=this,這樣是可行的,但是沒有使用Function.prototype.bind()看著更整潔:

      復制代碼 代碼如下:

      render: function () {

      this.getAsyncData(function () {

      this.specialFunction();

      this.anotherSpecialFunction();

      }.bind(this));

      }

      在調用.bind()時,它會簡單的創建一個新的函數,然后把this傳給這個函數。實現.bind()的代碼大概是這樣的:

      復制代碼 代碼如下:Function.prototype.bind = function (scope) {

      var fn = this;

      return function () {

      return fn.apply(scope);

      };

      }

      下面在看一個簡單的使用Function.prototype.bind()的例子:

      復制代碼 代碼如下:

      var foo = {

      x: 3

      };

      var bar = function(){

      console.log(this.x);

      };

      bar(); // undefined

      var boundFunc = bar.bind(foo);

      boundFunc(); // 3

      是不是很好用呢!不過遺憾的是IE8及以下的IE瀏覽器并不支持Function.prototype.bind()。支持的瀏覽器有Chrome 7+,Firefox 4.0+,IE 9+,Opera 11.60+,Safari 5.1.4+。雖然IE 8/7/6等瀏覽器不支持,但是Mozilla開發組為老版本的IE瀏覽器寫了一個功能類似的函數,代碼如下:

      復制代碼 代碼如下:

      if (!Function.prototype.bind) {

      Function.prototype.bind = function (oThis) {

      if (typeof this !== "function") {

      // closest thing possible to the ECMAScript 5 internal IsCallable function

      throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");

      }

      var aArgs = Array.prototype.slice.call(arguments, 1),

      fToBind = this,

      fNOP = function () {},

      fBound = function () {

      return fToBind.apply(this instanceof fNOP && oThis

      ? this

      : oThis,

      aArgs.concat(Array.prototype.slice.call(arguments)));

      };

      fNOP.prototype = this.prototype;

      fBound.prototype = new fNOP();

      return fBound;

      };

      }

    【JavaScript中的prototype.bind()方法介紹】相關文章:

    JavaScript數組常用方法介紹09-04

    詳解JavaScript中的splice()使用方法08-20

    Javascript中arguments對象的詳解和使用方法08-20

    JavaScript常用方法匯總10-25

    javascript跨域訪問的方法07-09

    javascript編程異常處理的方法08-04

    JavaScript fontcolor方法入門實例07-07

    有關深入理解JavaScript中的并行處理的介紹10-14

    JavaScript中的with關鍵字07-24

    在Java中執行JavaScript代碼07-14

    主站蜘蛛池模板: 欧美精品黑人粗大欧| 亚洲精品狼友在线播放| 亚洲一区精品无码| 四虎影视884a精品国产四虎| 熟女精品视频一区二区三区| 精品久久久久久无码国产| 国产精品99久久久久久人| 亚洲精品无码鲁网中文电影| 精品乱子伦一区二区三区| 久久最新精品国产| 国产美女久久精品香蕉69| 亚洲欧美日韩国产精品影院| 国内精品欧美久久精品| 97久人人做人人妻人人玩精品| 国产成人精品免费视频大全麻豆| 亚洲精品卡2卡3卡4卡5卡区| 久久精品三级视频| 国产欧美精品专区一区二区 | 久久亚洲av无码精品浪潮| 国产观看精品一区二区三区| 午夜精品美女自拍福到在线| 国产精品怡红院永久免费| 500av大全导航精品| .精品久久久麻豆国产精品| 国产女主播精品大秀系列| 国产欧美日韩综合精品一区二区| 久久棈精品久久久久久噜噜| 无码日韩精品一区二区三区免费 | 亚洲无码日韩精品第一页| 亚洲国产精品国产自在在线| 无夜精品久久久久久| 无码乱码观看精品久久| 中文字幕在线亚洲精品| 亚洲国产精品无码久久久蜜芽| 亚洲国产精品一区二区第一页| 亚洲AV无码成人精品区蜜桃| 人妻AV一区二区三区精品| 精品人伦一区二区三区潘金莲| 精品国产一区二区三区无码| 国产成人亚洲综合无码精品| 91国在线啪精品一区|