1. <tt id="5hhch"><source id="5hhch"></source></tt>
    1. <xmp id="5hhch"></xmp>

  2. <xmp id="5hhch"><rt id="5hhch"></rt></xmp>

    <rp id="5hhch"></rp>
        <dfn id="5hhch"></dfn>

      1. 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久久久久久无码

        1. <tt id="5hhch"><source id="5hhch"></source></tt>
          1. <xmp id="5hhch"></xmp>

        2. <xmp id="5hhch"><rt id="5hhch"></rt></xmp>

          <rp id="5hhch"></rp>
              <dfn id="5hhch"></dfn>