<delect id="sj01t"></delect>
  1. <em id="sj01t"><label id="sj01t"></label></em>
  2. <div id="sj01t"></div>
    1. <em id="sj01t"></em>

            <div id="sj01t"></div>

            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

            <delect id="sj01t"></delect>
            1. <em id="sj01t"><label id="sj01t"></label></em>
            2. <div id="sj01t"></div>
              1. <em id="sj01t"></em>

                      <div id="sj01t"></div>
                      黄色视频在线观看