国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

JavaScript中的bind方法的代碼示例

來源:懂視網 責編:小采 時間:2020-11-27 19:27:15
文檔

JavaScript中的bind方法的代碼示例

JavaScript中的bind方法的代碼示例:本篇文章給大家帶來的內容是關于JavaScript中的bind方法的代碼示例,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。之前已經實現過了call,apply和new。今天順便把bind也實現下。首先:bind方法返回的是一個綁定this后的函數,并且該函
推薦度:
導讀JavaScript中的bind方法的代碼示例:本篇文章給大家帶來的內容是關于JavaScript中的bind方法的代碼示例,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。之前已經實現過了call,apply和new。今天順便把bind也實現下。首先:bind方法返回的是一個綁定this后的函數,并且該函

本篇文章給大家帶來的內容是關于JavaScript中的bind方法的代碼示例,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

之前已經實現過了call,apply和new。今天順便把bind也實現下。
首先:

  1. bind方法返回的是一個綁定this后的函數,并且該函數并沒有執行,需要手動去調用。(從這一點看bind函數就是一個高階函數,而且和call,apply方法有區別)。
  2. bind方法可以綁定this,傳遞參數。注意,這個參數可以分多次傳遞。
  3. 如果bind綁定后的函數被new了,那么此時this指向就發生改變。此時的this就是當前函數的實例。
  4. 構造函數上的屬性和方法,每個實例上都有。

ok,上代碼~

Function.prototype.mybind = function(context){
 let that = this;
 let args1 = Array.prototype.slice.call(arguments,1);
 let bindFn = function(){
 let args2 = Array.prototype.slice.call(arguments);
 return that.apply(this instanceof bindFn?this:context,args1.concat(args2)); 
 }
 let Fn = function(){};
 Fn.prototype = this.prototype;
 bindFn.prototype = new Fn();
 return bindFn;
}

首先 獲取到第一次傳遞的參數args1,此處要做截取處理,因為第一個參數是this。接下來聲明一個函數bindFn,在該bindFn中獲取了第二次傳的參數args2,并且返回了that的執行。此處的that就是原函數,執行該原函數綁定原函數this的時候要注意判斷。如果this是構造函數bindFn new出來的實例,那么此處的this一定是該實例本身。反之,則是bind方法傳遞的this(context)。最后再把兩次獲得的參數通過concat()連接起來傳遞進去,這樣就實現了前3條。
最后一條:構造函數上的屬性和方法,每個實例上都有。 此處通過一個中間函數Fn,來連接原型鏈。Fn的prototype等于this的prototype。Fn和this指向同一個原型對象。bindFn的prototype又等于Fn的實例。Fn的實例的__proto__又指向Fn的prototype。即bindFn的prototype指向和this的prototype一樣,指向同一個原型對象。至此,就實現了自己的bind方法。
代碼寫好了, 測試一下吧~

Function.prototype.mybind = function(context){
 let that = this;
 let args1 = Array.prototype.slice.call(arguments,1);
 let bindFn = function(){
 let args2 = Array.prototype.slice.call(arguments);
 return that.apply(this instanceof bindFn?this:context,args1.concat(args2)); 
 }
 let Fn = function(){};
 Fn.prototype = this.prototype;
 bindFn.prototype = new Fn();
 return bindFn;
}

let obj = {
 name:'tiger'
}

function fn(name,age){
 this.say = '汪汪~';
 console.log(this);
 console.log(this.name+'養了一只'+name+','+age+'歲了 ');
}

/** 第一次傳參 */
let bindFn = fn.mybind(obj,'

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

JavaScript中的bind方法的代碼示例

JavaScript中的bind方法的代碼示例:本篇文章給大家帶來的內容是關于JavaScript中的bind方法的代碼示例,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。之前已經實現過了call,apply和new。今天順便把bind也實現下。首先:bind方法返回的是一個綁定this后的函數,并且該函
推薦度:
標簽: 中的 方法 js
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 亚洲免费久久 | 欧美一区二区视频 | 欧美3p在线观看一区二区三区 | 一区二区电影 | 精品一区二区视频 | 另类一区 | 亚洲欧美另类自拍第一页 | 精品久久亚洲一级α | 中文字幕有码在线观看 | 精品国产乱码一区二区三区麻豆 | 国产在线看不卡一区二区 | 欧美色图 亚洲 | 国产1页| 一区二区三区久久 | 在线观看亚洲专区 | 欧美激情91 | 九九精品成人免费国产片 | 日韩在线欧美高清一区 | 亚洲第一页色 | 亚洲第一页色 | 中文字幕免费观看 | 全免费a级毛片免费毛视频 热re91久久精品国产91热 | 欧美雌雄双性人交xxxx | 亚洲欧美在线免费观看 | 久久精品一区二区国产 | 欧美激情精品久久久久 | 97国产精品欧美一区二区三区 | 国产不卡一区二区视频免费 | 国产高清不卡一区二区三区 | 亚洲视频久久 | 亚洲色图欧美激情 | 99久久免费国产精精品 | 精品综合| 伊人色综合一区二区三区 | 国产欧美另类第一页 | 国产在线一区二区三区欧美 | 亚洲午夜久久久精品影院 | 欧美精品一区二区三区久久 | 国产成人一区二区三区 | 亚洲日韩在线视频 | 国产精品久久久久久久午夜片 |