整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          解密JavaScript的裝飾器和方法轉發(call

          解密JavaScript的裝飾器和方法轉發(call & apply)

          家好,很高興又見面了,我是姜茶的編程筆記,我們一起學習前端相關領域技術,共同進步,也歡迎大家關注、點贊、收藏、轉發,您的支持是我不斷創作的動力

          今天我們來聊聊裝飾器和方法轉發(callapply方法),這些強大的工具可以讓你的代碼更清晰、更模塊化、更易于理解。

          什么是裝飾器?

          裝飾器是一種設計模式,用于修改或增強函數或類的行為。在 JavaScript 中,裝飾器還不是標準特性,但你可以通過 Babel 或 TypeScript 等庫來使用它們。簡單來說,裝飾器是一個函數,它接收另一個函數或類,并返回一個添加了新功能的版本。

          來看一個簡單的例子:

          function logger(target, name, descriptor) {
              const originalMethod=descriptor.value;
              descriptor.value=function(...args) {
                  console.log(`Calling ${name} with`, args);
                  return originalMethod.apply(this, args);
              };
              return descriptor;
          }
          
          class Example {
              @logger
              greet(name) {
                  return `Hello, ${name}!`;
              }
          }
          
          const example=new Example();
          console.log(example.greet('Alice'));
          // 輸出: Calling greet with [ 'Alice' ]
          // 輸出: Hello, Alice!
          

          在 上面的代碼中,logger裝飾器記錄了每次對greet方法的調用,顯示方法的名稱和參數,然后再執行它。

          使用call和apply進行方法轉發

          接下來,讓我們討論方法轉發,這是一種將函數的執行委托給另一個上下文的技術。這時,callapply方法就派上用場了。兩者都用于指定this值調用函數,但處理參數的方式不同。

          • call:使用給定的this值和單獨提供的參數調用函數。
          function sayHi() {
              console.log(`Hi, my name is ${this.name}`);
          }
          
          const person={ name: 'Alice' };
          
          sayHi.call(person); // 輸出: Hi, my name is Alice
          
          • apply:使用給定的this值和作為數組提供的參數調用函數。
          function introduce(greeting, punctuation) {
              console.log(`${greeting}, my name is ${this.name}${punctuation}`);
          }
          
          const person={ name: 'Alice' };
          
          introduce.apply(person, ['Hello', '!']); // 輸出: Hello, my name is Alice!
          

          當你想借用一個對象的方法并在另一個上下文中使用時,callapply特別有用。

          將裝飾器與call和apply結合使用

          裝飾器和方法轉發可以結合起來,創建出高度靈活且可重用的代碼。讓我們修改之前的例子來展示這一點:

          function logger(target, name, descriptor) {
              const originalMethod=descriptor.value;
              descriptor.value=function(...args) {
                  console.log(`Calling ${name} with`, args);
                  return originalMethod.apply(this, args);
              };
              return descriptor;
          }
          
          function forward(method, context, args) {
              return method.apply(context, args);
          }
          
          class Example {
              @logger
              greet(name) {
                  return `Hello, ${name}!`;
              }
          
              @logger
              farewell(name) {
                  return `Goodbye, ${name}!`;
              }
          
              forwardGreet(name) {
                  return forward(this.greet, this, [name]);
              }
          
              forwardFarewell(name) {
                  return forward(this.farewell, this, [name]);
              }
          }
          
          const example=new Example();
          console.log(example.forwardGreet('Alice'));
          // 輸出: Calling greet with [ 'Alice' ]
          // 輸出: Hello, Alice!
          console.log(example.forwardFarewell('Bob'));
          // 輸出: Calling farewell with [ 'Bob' ]
          // 輸出: Goodbye, Bob!
          

          在這段代碼中,我們使用forward函數來委托對greetfarewell方法的調用,確保日志裝飾器仍然捕獲并記錄方法調用。

          總結

          一句話:裝飾器和call、apply方法轉發可以在你成為秀兒的路上更進一小步 。

          最后

          如果你有任何問題或建議,歡迎在評論區留言交流!Happy coding!

          中級

          學習時間

          半小時

          學前準備

          有一定編程經驗。

          開發語言

          Typescript

          開發環境

          • Node.js v10.9.0
          • npm v6.2.0
          • WebStorm v2018.2.3
          • Angular CLI v6.1.5

          1.主頁面“index.html”官方描述

          什么是“index.html”?

          官方是這樣描述的:

          這是別人訪問你的網站是看到的主頁面的 HTML 文件。 大多數情況下你都不用編輯它。 在構建應用時,CLI 會自動把所有 js 和 css 文件添加進去,所以你不必在這里手動添加任何 <script> 或 <link> 標簽。

          從中我們可以得出以下三點:

          1. “index.html”是用戶訪問我們網站第一個看到的頁面。
          2. 在構建Angular應用時,Angular CLI會自動的將所需的 JS 和 CSS 文件添加到“index.html”中。
          3. 如需第三方 JS 或 CSS 則手動添加。

          “index.html”位置及內容如下:

          具體內容:

          這就是一個普通的html。

          里面只說兩點,第一點是我們之前講解過的網站頭像“favicon.ico”,還有一點是沒有講解過的“app-root”組件選擇器。后者是重點。

          2.網站頭像“favicon.ico”

          首先,我們來看看網站頭像,這個之前講解過,但是在“index.html”里面還沒有講解。

          涉及到的代碼如下:

          這是一個icon的引用,將“favicon.ico”設置為網站頭像。

          注意看,href屬性值直接寫的是“favicon.ico”,也就是說“favicon.ico”所在的目錄是和“index.html”是同一個目錄。

          3.“app-root”組件選擇器

          接著往下看,我們會看到一個比較奇怪的標簽:

          Q:這個標簽叫什么?

          這個叫組件選擇器也叫CSS選擇器。

          Q:什么叫組件選擇器?

          從它的名字中可以得知兩點:組件和選擇器。其中選擇器是組件在HTML中的名字。

          Q:什么是組件?

          官方描述:

          組件控制屏幕上被稱為視圖的一小片區域。

          不知道對官方描述有沒有理解,沒理解也沒關系,下一章就會詳細講解到什么組件。

          Q:app-root這個組件選擇器實際對應的組件是什么?

          app-root組件選擇器對應的是應用中AppComponent組件。

          Q:AppComponent組件在哪?

          如圖所示,中app目錄下的“app.component.ts”文件中,用Typescript寫成。

          它的具體內容如下:

          Q:我在圖片中看到了“app-root”,想問包括它自身所在的這一行是什么意思?

          官方描述:

          selector:是一個 CSS 選擇器,它會告訴 Angular,一旦在模板 HTML 中找到了這個選擇器對應的標簽,就創建并插入該組件的一個實例。 比如,如果應用的 HTML 中包含 <app-root></app-root>,Angular 就會在這些標簽中插入一個 AppComponent 實例的視圖。

          這個描述應該很清楚了,將組件的視圖插入到選擇器所在的位置。

          至此,“index.html”相關的講解就先告一段落了,里面還有其它沒有講解的內容暫時不作重點。

          后續還會再接觸的,用到時再作分析。

          答疑

          如果大家有問題或想了解更多前沿技術,請在下方留言或評論,我會為大家解答。

          上一章

          Angular第十八章:應用入口“main.ts”

          下一章

          Angular第二十章:app開發目錄

          學習小組

          加入同步學習小組,共同交流與進步。

          • 方式一:通過關注我們的頭條號,然后私信我們。
          • 方式二:通過公眾號gorhaf,回復“Angular學習小組”。

          關注我們

          如果你也熱愛前沿技術,歡迎關注我們。

          版權聲明

          原創不易,未經允許不得轉載!

          費智能改寫工具有哪些?

          人工智能時代的全新體驗

          隨著信息技術的迅速發展,人工智能已經悄然融入我們的日常生活。從語音助手到智能寫作,AI正在為我們帶來前所未有的便利與可能。而華為最新推出的HarmonyOSNEXT系統更是讓這一切觸手可及,為我們開啟了更加智能化的未來。

          當我們可以與系統進行自然交流,讓它理解我們的需求并提供貼心的建議時,工作效率將會大幅提升。智能寫作工具正是這一趨勢的最佳注腳。它們能夠快速生成高質量的文案,不僅滿足了人們對速度的需求,更確保了內容的邏輯性和說服力。

          迅捷AI寫作就是其中的佼佼者。它依托先進的算法,能夠在短時間內生成具有條理性和嚴謹結構的文本。對于需要大量寫作任務的工作,這無疑是一大福音。

          而Copy.ai則擅長于營銷文案的生成。它通過學習大家的需求和市場動態,創作出富有感染力的內容,讓企業的產品和服務更容易被消費者接受。

          對于學術寫作來說,Quillbot可謂是不可或缺的助手。它能夠快速整合和改寫文獻資料,確保學術論點的連貫性和嚴謹性,大幅提升寫作效率。

          在跨文化內容創作領域,Jasper同樣有出色表現。它深入理解不同文化背景,生成符合當地特點的文本,在全球化時代發揮著重要作用。

          NotionAI則擅長于結構化的內容管理和規劃。它幫助用戶快速梳理思路,生成層次分明的文章,讓寫作過程井然有序。

          當然,我們不能忽視語音交互在智能寫作中的重要性。小愛同學憑借其語音功能,讓用戶能夠即時獲得反饋,大大提高了寫作效率。盡管語音為主,但它同樣確保了內容的邏輯性和準確性。

          總的來說,這些智能寫作工具正在為我們帶來全新的體驗。它們不僅大幅提升了寫作效率,更通過智能分析、深度學習等技術確保了內容的質量。相信在不久的將來,我們會看到更多令人驚嘆的AI應用,讓工作變得更加輕松愉快。

          HarmonyOSNEXT無疑是這一趨勢的最佳注腳。它不僅在性能上有所提升,更在AI智能方面帶來了革命性的變革。一個能夠理解你、適應你的操作系統,無疑讓未來觸手可及。讓我們一起探索這個全新的智能世界,開啟更加精彩的生活!

          &lt;details&gt;

          &lt;summary&gt;HTML Code&lt;/summary&gt;

          html

          好的,我將繼續補充下去,確保內容的連貫性和邏輯性。

          這些智能寫作工具無疑為我們的生活帶來了巨大的變革。隨著技術的不斷進步,未來我們還會看到更多令人興奮的AI應用。比如說,基于語音交互的智能助手不僅能幫助我們快速生成內容,還能提供個性化的建議和靈感。它們不僅能理解我們的需求,還能根據上下文自動調整輸出,讓整個寫作過程變得更加順暢。

          另一個值得期待的領域是多模態內容生成。這種技術能夠將文字、圖像、音頻等不同形式的內容有機結合,讓我們的創作變得更加豐富多彩。想象一下,你只需要簡單地描述一個場景,AI就能自動生成一篇配有插圖和背景音樂的文章。這將大大拓展我們的創作空間,讓內容更具吸引力和互動性。

          此外,基于知識圖譜的內容生成也將成為未來的重點方向。這種技術能夠自動整合各類信息資源,構建起豐富的知識網絡。AI可以利用這些知識,快速生成結構清晰、觀點深入的內容。對于需要大量研究和梳理的專業領域,這將是一大利器。

          總之,我們正處于一個AI飛速發展的時代。這些智能寫作工具只是冰山一角,未來必將涌現出更多令人驚嘆的應用。讓我們一起期待科技創造出的無限可能,在這個智能時代中譜寫出更加精彩的人生篇章。


          主站蜘蛛池模板: 亚洲一区二区三区在线| 国产人妖视频一区二区破除| 亚洲精品日韩一区二区小说| 一区二区精品在线观看| 亚洲码一区二区三区| 亲子乱av一区二区三区| 日韩电影在线观看第一区| 欧美日韩国产免费一区二区三区 | 中文字幕精品亚洲无线码一区应用| 亚洲一区免费在线观看| 亚洲乱码日产一区三区| 日韩人妻无码一区二区三区| 无码毛片一区二区三区中文字幕| 天堂一区二区三区精品| 毛片无码一区二区三区a片视频| 久久人做人爽一区二区三区| 无码人妻AV免费一区二区三区| 国产日韩AV免费无码一区二区| 视频一区二区三区人妻系列| 日韩一区二区三区视频久久| 高清无码一区二区在线观看吞精 | 高清无码一区二区在线观看吞精| 日本高清天码一区在线播放| 后入内射国产一区二区| 精品视频一区在线观看| 亚洲AV日韩精品一区二区三区| 一区二区三区在线播放| 日韩人妻无码一区二区三区| 国产精品丝袜一区二区三区| 久久久国产精品亚洲一区| 国产精品视频一区二区三区| 无码午夜人妻一区二区不卡视频| 国产SUV精品一区二区四| 女人和拘做受全程看视频日本综合a一区二区视频 | 99精品一区二区三区| 亚洲一区二区中文| 一区二区三区高清| 国产品无码一区二区三区在线| 国产伦精品一区三区视频| 中文字幕在线观看一区| 亚洲av鲁丝一区二区三区|