jQuery源碼學習一: 創建一個jquery實例

来源:https://www.cnblogs.com/xya-b/archive/2019/09/05/11466870.html
-Advertisement-
Play Games

前言: jquery是每個前端都會的基礎技能,眾所周知,jquery返回的是jquery實例方法,但是我們似乎是直接使用$就可以獲取到jquery的方法啦,可以在瀏覽器中判斷一下 window.$ 和window.jQuery,jQuery 之間的關係,就會發現他們之間是全等的; 不使用new方法調 ...


前言:

jquery是每個前端都會的基礎技能,眾所周知,jquery返回的是jquery實例方法,但是我們似乎是直接使用$就可以獲取到jquery的方法啦,可以在瀏覽器中判斷一下 window.$ 和window.jQuery,jQuery 之間的關係,就會發現他們之間是全等的;

不使用new方法調用

我們一般調用實例大部分是通過new方法,但是jquery卻不是,而是直接調用,這是為什麼呢
1. 創建實例方法:

  (function(root){
    var jQuery = function(){
      console.log('創建實例啦')
    }
    root.jQuery = jQuery //這樣賦值就可以調用啦
  })(window)
2.返回時操作

但是現在頁面上調用jQuery仍然不能使用$調用,於是簡單修改代碼

  (function(root){
    var jQuery = function(){
      return new jQuery()
    }
    root.$ = root.jQuery = jQuery 
  })(this) 

這樣我們就可以不在外部調用new方法,因為jQuery在返回的時候就已經調用了new

原型共用

在之前的操作下,我們已經將new jQuery返回了出去,但是這樣是有問題的。我們在jquery原型中定義一個init方法,並將init返回出去
1. 定義一個init

  var jQuery = function(){
    return new jQuery.prototype.init();
  }
  jQuery.prototype = {
    init: function(){
    }
  }

但是這樣我們雖然解決了報錯問題,但是我們現在無法獲取到jQuery中的原型方法,也就無法調用到jQuery的方法。
2. 原型共用
jQuery中有很重要的一行代碼:

  jQuery.prototype.init.prototype = jQuery.prototype

這就是原型共用,簡單從代碼來看,就是將jquery的原型賦值給jquery.prototype.init方法原型;
這樣我們調用jquery時,雖然獲取的是init方法,但是依然可以調用jquery中的原型方法。
3. 例子
我們在jquery上簡單擴展方法,並列印jquery驗證

  jQuery.prototype = {
    init: function(){
    },
    css: function(){},
  }

結果:
Image text


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Android Gradle 多渠道構建 多渠道構建的基本原理 在Android Gradle中,定義了一個叫Build Variant的概念,一個Build Variant=Build TYpe+Product Flavor,Build Type就是我們構建的類型,比如release和debug; ...
  • 在實際開發中,為了防止用戶誤觸返回按鈕導致程式退出,通常會設置為在1秒內連續點擊兩次才會退出應用程式。Android中一般的處理方式是在onKeyDown方法內做計時處理,當keyCode == KeyEvent.KEYCODE_BACK 且 兩次點擊返回按鈕間隔時間小於1秒則退出應用程式,在Flu... ...
  • 什麼是JDK? JDK 即 Java Development Kit,Java開發工具包,用來編譯 Java 程式。JRE 在接觸JDK的過程中,同時瞭解到 JRE,JRE 即 Java Runtime Environment ,Java的運行環境。JDK中會包含JRE。 如何下載JDK? 搜索jd ...
  • -(NSString *)digitUppercase:(NSString *)numstr{ double numberals=[numstr doubleValue]; NSArray *numberchar = @[@"零",@"壹",@"貳",@"叄",@"肆",@"伍",@"陸",@"柒" ...
  • ### 前言 Flutter是谷歌的移動UI框架,可以快速在iOS和Android上構建高質量的原生用戶界面。 Flutter可以與現有的代碼一起工作。在全世界,Flutter正在被越來越多的開發者和組織使用,並且Flutter是完全免費、開源的。 我本人也是非常安好Flutter,所以也進入到了F ...
  • 最近迷上了前端開發,發現前端也挺好玩的;於是心血來潮安裝了node.js ;玩玩vue;安裝的一路順暢,暢通無阻;偏偏安裝到 npm i --global --product ion windows-build-tools 命令時;怎麼安裝都不成功;一直報 npm ERR! windows-buil ...
  • 代碼: ...
  • 如果為了避免 js addEventListener事件多次綁定問題,可以使用.onclick直接綁定,後一次click綁定會覆蓋調前一次。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...