亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

JavaScript

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

時間:2024-07-31 19:03:13 JavaScript 我要投稿
  • 相關(guān)推薦

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

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

  下面舉個簡單的例子:

  復制代碼 代碼如下:

  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));

  }

  在調(diào)用.bind()時,它會簡單的創(chuàng)建一個新的函數(shù),然后把this傳給這個函數(shù)。實現(xiàn).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+,F(xiàn)irefox 4.0+,IE 9+,Opera 11.60+,Safari 5.1.4+。雖然IE 8/7/6等瀏覽器不支持,但是Mozilla開發(fā)組為老版本的IE瀏覽器寫了一個功能類似的函數(shù),代碼如下:

  復制代碼 代碼如下:

  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()方法介紹】相關(guān)文章:

javascript跨域訪問的方法07-19

如何調(diào)試javascript腳本呢07-19

Excel中if函數(shù)使用的方法06-16

音樂中節(jié)奏的訓練方法06-20

沖突管理中的有效溝通方法05-05

白茶的沖泡方法介紹08-15

烹飪青菜的方法介紹09-03

在Word文檔中給文章段落分欄的方法11-10

excel中sumif函數(shù)使用方法03-23

Excel中COUNTIF函數(shù)的使用方法01-23