亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

20170625-bind方法的實現(xiàn)

djfml / 2675人閱讀

方法1
Funtion.prototype.bind = function(context){
    var self = this;
    return function(){
        return self.apply(context, arguments);
    }
}

缺點: 沒有辦法在調(diào)用bind方法的時候指定額外的參數(shù)

方法2
Function.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方法會遇到以下這種情況:

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é)果是一致的,那么這種情況該如何實現(xiàn)呢?下面的方法是《JavaScript Web Application》一書中對bind()的實現(xiàn):通過設(shè)置一個中轉(zhuǎn)構(gòu)造函數(shù)F,使綁定后的函數(shù)與調(diào)用bind()的函數(shù)處于同一原型鏈上,用new操作符調(diào)用綁定后的函數(shù),返回的對象也能正常使用instanceof,因此這是最嚴謹?shù)腷ind()實現(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)用時,this就是F的一個實例
            return self.apply((this instanceof F ? this: context), finalArgs);
        };
    F.prototype = self.prototype;
    bound.prototype = new F();
    return bound;
}
參考資料

Javascript中bind()方法的使用與實現(xiàn)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/83652.html

相關(guān)文章

  • 樂字節(jié)-Java8核心特性實戰(zhàn)-接口默認方法

    摘要:語法中接口可以包含實現(xiàn)方法,需要使用修飾,此類方法稱為默認方法。核心特性接口默認方法就介紹到這里了,后續(xù)小樂會繼續(xù)講述核心特性。 JAVA8已經(jīng)發(fā)布很久,是自java5(2004年發(fā)布)之后Oracle發(fā)布的最重要的一個版本。其中包括語言、編譯器、庫、工具和JVM等諸多方面的新特性,對于國內(nèi)外互聯(lián)網(wǎng)公司來說,Java8是以后技術(shù)開發(fā)的趨勢。這里主要講解在開發(fā)中幾個核心的新特性。(主要從...

    lbool 評論0 收藏0
  • 1、管家婆項目

    摘要:項目訓(xùn)練目標(biāo)項目訓(xùn)練目標(biāo)項目目標(biāo)綜合運用前面所學(xué)習(xí)的知識點熟練層層層之間的方法相互調(diào)用操作熟練操作數(shù)據(jù)庫表完成增刪改查了解公司項目開發(fā)的流程,充分的掌握項目需求分析設(shè)計與功能的代碼實現(xiàn)。 01項目訓(xùn)練目標(biāo) * A: 項目訓(xùn)練目標(biāo) * a: 項目目標(biāo) * 綜合運用前面所學(xué)習(xí)的知識點 * 熟練View層、Service層、Dao層之間的方法相互調(diào)用操...

    binaryTree 評論0 收藏0
  • Java設(shè)計模式-模板方法模式

    摘要:模板方法模式定義定義抽象類并且聲明一些抽象基本方法供子類實現(xiàn)不同邏輯,同時在抽象類中定義具體方法把抽象基本方法封裝起來,這就是模板方法模式。 近日,ofo小黃車宣布入駐法國巴黎,正式進入全球第20個國家,共享單車已然改變了我們的出行方式。就拿我自己來說,每當(dāng)下班出地鐵的第一件事,以光速鎖定一輛共享單車,百米沖刺的速度搶在別人之前占領(lǐng)它。 而大家都是重復(fù)著同樣的動作,拿出手機開鎖、騎車、...

    levius 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<