最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ECMAScript5(ES5)中bind方法使用小結(jié)

 更新時(shí)間:2015年05月07日 08:58:52   投稿:junjie  
這篇文章主要介紹了ECMAScript5(ES5)中bind方法使用小結(jié),bind和call以及apply一樣,都是可以改變上下文的this指向的,需要的朋友可以參考下

一直以來對和this有關(guān)的東西模糊不清,譬如call、apply等等。這次看到一個(gè)和bind有關(guān)的筆試題,故記此文以備忘。

  bind和call以及apply一樣,都是可以改變上下文的this指向的。不同的是,call和apply一樣,直接引用在方法上,而bind綁定this后返回一個(gè)方法,但內(nèi)部核心還是apply。

直接看例子:

復(fù)制代碼 代碼如下:

var obj = {
  a: 1,
  b: 2,
  getCount: function(c, d) {
    return this.a + this.b + c + d;
  }
};
 
window.a = window.b = 0;
console.log(obj.getCount(3, 4));  // 10
var func = obj.getCount;
console.log(func(3, 4));  // 7

為何會這樣?因?yàn)閒unc在上下文中的this是window!bind的存在正是為了改變this指向獲取想要的值:

復(fù)制代碼 代碼如下:

var obj = {
  a: 1,
  b: 2,
  getCount: function(c, d) {
    return this.a + this.b + c + d;
  }
};
 
window.a = window.b = 0;
var func = obj.getCount.bind(obj);
console.log(func(3, 4));  // 10

  bind是function的一個(gè)函數(shù)擴(kuò)展方法,bind以后代碼重新綁定了func內(nèi)部的this指向(obj),但是不兼容ie6~8,兼容代碼如下:

復(fù)制代碼 代碼如下:

var obj = {
  a: 1,
  b: 2,
  getCount: function(c, d) {
    return this.a + this.b + c + d;
  }
};
 
Function.prototype.bind = Function.prototype.bind || function(context) {
  var that = this;
  return function() {
    // console.log(arguments); // console [3,4] if ie<6-8>
    return that.apply(context, arguments);
 
  }
}
window.a = window.b = 0;
var func = obj.getCount.bind(obj);
console.log(func(3, 4));  // 10

  其實(shí)在我看來bind的核心是返回一個(gè)未執(zhí)行的方法,如果直接使用apply或者call:

復(fù)制代碼 代碼如下:

var ans = obj.getCount.apply(obj, [3, 4]);
console.log(ans); // 10

  無法使用簡寫的func函數(shù)構(gòu)造,所以用bind傳遞this指向,再返回一個(gè)未執(zhí)行的方法,實(shí)現(xiàn)方式相當(dāng)巧妙。

相關(guān)文章

最新評論

沁水县| 射洪县| 通州市| 张家界市| 新田县| 奉化市| 安吉县| 吴旗县| 庆安县| 洪泽县| 铜山县| 和平县| 民权县| 甘孜县| 衡阳市| 平塘县| 鄄城县| 浦北县| 彝良县| 普兰县| 陇西县| 哈密市| 新营市| 连平县| 四子王旗| 云南省| 九台市| 塔河县| 延安市| 名山县| 闻喜县| 湖南省| 芦溪县| 子长县| 连江县| 波密县| 正镶白旗| 德保县| 马公市| 开原市| 同德县|