国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

javaScript鏈?zhǔn)秸{(diào)用

boredream / 583人閱讀

摘要:通過實現(xiàn)鏈?zhǔn)秸{(diào)用來理解鏈?zhǔn)秸{(diào)用是我們平常經(jīng)常會用到,比如中的還有中的。直接用一個匿名函數(shù)返回一個的對象,然后賦值給并掛載到全局上,這樣就實現(xiàn)了一個的鏈?zhǔn)秸{(diào)用了。

通過實現(xiàn)鏈?zhǔn)秸{(diào)用來理解

?? 鏈?zhǔn)秸{(diào)用是我們平常經(jīng)常會用到,比如JQuery中的$("id").eq(0), 還有l(wèi)odash中的_.chain().push()。 這些都是平常會用到的,但是都是已經(jīng)封裝好的,我們知道用起來很方便卻不知道實現(xiàn)的原理是什么。
?? 其實呢它并沒有很神秘,只不過是一種語法招數(shù),它能讓你通過重用一個初始操作來達到用少量代碼表達復(fù)雜操作的目的。

通過例子來分析鏈?zhǔn)秸{(diào)用

??其實鏈?zhǔn)秸{(diào)用就是讓一個類的每個方法都返回this值,從而達到鏈?zhǔn)秸{(diào)用
??首先創(chuàng)建一個構(gòu)造函數(shù),把那些元素作為數(shù)組保存在一個實例屬性中,并把所有定義在構(gòu)造器函數(shù)的 prototype屬性指向?qū)ο笾械姆椒ǘ挤祷赜靡哉{(diào)用方法的那個實例的引用,那么它就具有了進行鏈?zhǔn)秸{(diào)用的能力
我們來看一下這段例子

 $("div")
      .eq(0)
      .css("width", "200px")
      .show();

這其實就是一段簡單JQuery代碼,選擇第一個div設(shè)置css樣式,然后將它顯示出來。

    function JQuery(selector) {
      this.elements = document.querySelectorAll(selector);
    }
    
    JQuery.prototype = {
      eq: function(index) {
        this.elements = [this.elements[index]]
        return this;
      },
      css: function(prop, value) {
        this.elements.forEach(function(el) {
          // 動態(tài)設(shè)置屬性
          el.style[prop] = value;
        })
        return this;
      },
      show: function() {
        this.css("display", "block")
        return this;
      },
    }

這段代碼很明顯在prototype上的三個函數(shù)都返回了this,在函數(shù)中實現(xiàn)對應(yīng)的功能也是直接使用this來獲取值,然后修改this中的值再返回this,這樣在下次調(diào)用的時候還是JQuery對象,從而實現(xiàn)了鏈?zhǔn)秸{(diào)用。
??既然函數(shù)都是在原型鏈上,那么肯定需要創(chuàng)建一個對象才能去調(diào)用函數(shù)吧,而我們并沒看到new JQuery,而且也沒有看見$符號,那怎么才能使用呢。

window.$ = function(selector) {
  return new JQuery(selector);
}
$("div")
  .eq(0)
  .css("width", "200px")
  .show();

直接用一個匿名函數(shù)返回一個new JQuery()的對象,然后賦值給$并掛載到全局上,這樣就實現(xiàn)了一個JQuery的鏈?zhǔn)秸{(diào)用了。

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/99672.html

相關(guān)文章

  • javaScript鏈?zhǔn)?/em>調(diào)用原理以及加法實現(xiàn)

    摘要:相信很多小伙伴在面試的過程中都被問過鏈?zhǔn)秸{(diào)用的原理,甚至有些面試官還會讓你用其實現(xiàn)例如加法操作,舉例第一次看到這個題目時,或許你沒有什么頭緒,不要緊,讓我們慢慢來首先,大家還是否記得在使用時,我們會經(jīng)常這樣去操作一個節(jié)點這是怎么做到的原理很 相信很多小伙伴在面試的過程中都被問過js鏈?zhǔn)秸{(diào)用的原理,甚至有些面試官還會讓你用其實現(xiàn)例如加法操作,舉例: add(1)(2)(3) //6...

    LuDongWei 評論0 收藏0
  • 聽飛狐聊JavaScript設(shè)計模式系列14

    摘要:本回內(nèi)容介紹上一回,聊了聊狀態(tài)模式,并介紹了一下介一回,聊鏈?zhǔn)骄幊蹋M一下,再模擬一下封裝一個庫。這一回,主要聊了鏈?zhǔn)秸{(diào)用,模擬了,尤其是,希望大家能喜歡這次代碼分享。下一回,聊一聊的策略模式。 本回內(nèi)容介紹 上一回,聊了聊狀態(tài)模式(State),并介紹了一下vue.js;介一回,聊鏈?zhǔn)骄幊蹋M一下jQuery,再模擬一下underscore.js,封裝一個庫。 1. 鏈?zhǔn)秸{(diào)用 (...

    fox_soyoung 評論0 收藏0
  • JavaScript 設(shè)計模式讀書筆記(四)——單體模式和鏈?zhǔn)?/em>調(diào)用

    摘要:單體模式在多種設(shè)計模式中,單體模式是最簡單,也是最基礎(chǔ)的設(shè)計模式。和之前說到的下劃線表示私用成員方法比較起來,最大的優(yōu)點就是可以創(chuàng)建真正的私用成員,使其不會在構(gòu)造函數(shù)之外被隨意修改。 單體模式 在多種Javascript設(shè)計模式中,單體模式是最簡單,也是最基礎(chǔ)的設(shè)計模式。它基礎(chǔ)到似乎不太像是一種設(shè)計模式,因為我們在編寫代碼的過程中隨時都會用到,并不需要過多思考,這是它簡單的一面。同時...

    DevWiki 評論0 收藏0
  • 鏈?zhǔn)?/em>調(diào)用與事件循環(huán)--一道JavaScript面試題的思考

    摘要:最后畫幾張粗糙的圖,簡單描述一下這個執(zhí)行的過程因為是鏈?zhǔn)秸{(diào)用,所以在鏈上的都會入棧然后執(zhí)行,額,執(zhí)行棧少畫了和。。。 前言:昨天在群里討(jin)論(chui)技(niu)術(shù)(pi),有位老鐵發(fā)了一道他面的某公司面試題,順手保存了。今早花了一點時間把這題做了出來,發(fā)現(xiàn)挺有意思的,決定在今天認真工(hua)作(shui)前,與大家分享我的解題方案和思考過程。 題目如下(可以自己先思考一會...

    wow_worktile 評論0 收藏0
  • javascript設(shè)計模式鏈?zhǔn)?/em>模式學(xué)習(xí)

    摘要:鏈?zhǔn)侥J酵ㄟ^在對象方法中將當(dāng)前對象返回,實現(xiàn)對同一個對象多個方法的鏈?zhǔn)秸{(diào)用。我們試著修改上面的函數(shù)然后執(zhí)行為什么會報錯呢因為這里,因為這里返回的指向的是,而不是的上并沒有這個方法。 ??鏈?zhǔn)侥J剑和ㄟ^在對象方法中將當(dāng)前對象返回,實現(xiàn)對同一個對象多個方法的鏈?zhǔn)秸{(diào)用。從而簡化對該對象的多個方法的多次調(diào)用,對該對象的多次引用。 ??jquery是基于原型繼承,每個原型下的方法都返回當(dāng)前對象...

    shiina 評論0 收藏0

發(fā)表評論

0條評論

boredream

|高級講師

TA的文章

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