• <sub id="h4knl"><ol id="h4knl"></ol></sub>
    <sup id="h4knl"></sup>
      <sub id="h4knl"></sub>

      <sub id="h4knl"><ol id="h4knl"><em id="h4knl"></em></ol></sub><s id="h4knl"></s>
      1. <strong id="h4knl"></strong>

      2. 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

        国产高潮无套免费视频_久久九九兔免费精品6_99精品热6080YY久久_国产91久久久久久无码
      3. <sub id="h4knl"><ol id="h4knl"></ol></sub>
        <sup id="h4knl"></sup>
          <sub id="h4knl"></sub>

          <sub id="h4knl"><ol id="h4knl"><em id="h4knl"></em></ol></sub><s id="h4knl"></s>
          1. <strong id="h4knl"></strong>

          2. 亚洲阿v天堂在线观看2019 | 在线中文字幕有码中文 | 亚洲一区二区三区中文字幕 | 亚洲中文在线视频 | 午夜短视频福利在线播放 | 香蕉精品高清在线观看视频 |