方法1
Funtion.prototype.bind = function(context){ var self = this; return function(){ return self.apply(context, arguments); } }
缺點(diǎn): 沒有辦法在調(diào)用bind方法的時(shí)候指定額外的參數(shù)
方法2Function.prototype.bind = function(context){ var args = Array.prototype.slice.call(arguments, 1), self = this; return function(){ var innerArgs = Array.prototype.slice.call(arguments); var finalArgs = args.concat(innerArgs); return self.apply(context, finalArgs); } }方法3
在JavaScript中,使用bind方法會(huì)遇到以下這種情況:
function Person(){ this.name = "xin"; this.age = "22"; } var obj = { sex: "male"}; var temp = Person.bind(obj); temp(); // 調(diào)用temp后,obj就成為了 /*{ name: "xin", age: "22", sex: "male" }* var p = new temp(); // 結(jié)果為: p = { name: "xin", age: "22"}
通過上面的例子,可以看到通過new方式調(diào)用temp方法和用new方式調(diào)用Person方法的結(jié)果是一致的,那么這種情況該如何實(shí)現(xiàn)呢?下面的方法是《JavaScript Web Application》一書中對(duì)bind()的實(shí)現(xiàn):通過設(shè)置一個(gè)中轉(zhuǎn)構(gòu)造函數(shù)F,使綁定后的函數(shù)與調(diào)用bind()的函數(shù)處于同一原型鏈上,用new操作符調(diào)用綁定后的函數(shù),返回的對(duì)象也能正常使用instanceof,因此這是最嚴(yán)謹(jǐn)?shù)腷ind()實(shí)現(xiàn)。
Funtion.prototype.bind = function(context){ var args = Array.prototype.slice.call(arguments, 1), self = this, F = function(){}, bound = function(){ var innerArgs = Array.prototype.slice.call(arguments); var finalArgs = args.concat(innerArgs); // 當(dāng)通過new方法調(diào)用時(shí),this就是F的一個(gè)實(shí)例 return self.apply((this instanceof F ? this: context), finalArgs); }; F.prototype = self.prototype; bound.prototype = new F(); return bound; }參考資料
Javascript中bind()方法的使用與實(shí)現(xiàn)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/83652.html
摘要:語(yǔ)法中接口可以包含實(shí)現(xiàn)方法,需要使用修飾,此類方法稱為默認(rèn)方法。核心特性接口默認(rèn)方法就介紹到這里了,后續(xù)小樂會(huì)繼續(xù)講述核心特性。 JAVA8已經(jīng)發(fā)布很久,是自java5(2004年發(fā)布)之后Oracle發(fā)布的最重要的一個(gè)版本。其中包括語(yǔ)言、編譯器、庫(kù)、工具和JVM等諸多方面的新特性,對(duì)于國(guó)內(nèi)外互聯(lián)網(wǎng)公司來(lái)說,Java8是以后技術(shù)開發(fā)的趨勢(shì)。這里主要講解在開發(fā)中幾個(gè)核心的新特性。(主要從...
摘要:項(xiàng)目訓(xùn)練目標(biāo)項(xiàng)目訓(xùn)練目標(biāo)項(xiàng)目目標(biāo)綜合運(yùn)用前面所學(xué)習(xí)的知識(shí)點(diǎn)熟練層層層之間的方法相互調(diào)用操作熟練操作數(shù)據(jù)庫(kù)表完成增刪改查了解公司項(xiàng)目開發(fā)的流程,充分的掌握項(xiàng)目需求分析設(shè)計(jì)與功能的代碼實(shí)現(xiàn)。 01項(xiàng)目訓(xùn)練目標(biāo) * A: 項(xiàng)目訓(xùn)練目標(biāo) * a: 項(xiàng)目目標(biāo) * 綜合運(yùn)用前面所學(xué)習(xí)的知識(shí)點(diǎn) * 熟練View層、Service層、Dao層之間的方法相互調(diào)用操...
摘要:模板方法模式定義定義抽象類并且聲明一些抽象基本方法供子類實(shí)現(xiàn)不同邏輯,同時(shí)在抽象類中定義具體方法把抽象基本方法封裝起來(lái),這就是模板方法模式。 近日,ofo小黃車宣布入駐法國(guó)巴黎,正式進(jìn)入全球第20個(gè)國(guó)家,共享單車已然改變了我們的出行方式。就拿我自己來(lái)說,每當(dāng)下班出地鐵的第一件事,以光速鎖定一輛共享單車,百米沖刺的速度搶在別人之前占領(lǐng)它。 而大家都是重復(fù)著同樣的動(dòng)作,拿出手機(jī)開鎖、騎車、...
閱讀 3715·2021-10-14 09:43
閱讀 3311·2021-08-25 09:38
閱讀 609·2019-08-30 15:55
閱讀 1343·2019-08-30 13:05
閱讀 2238·2019-08-29 16:05
閱讀 501·2019-08-29 12:58
閱讀 2791·2019-08-29 12:34
閱讀 3241·2019-08-26 12:15