iT邦幫忙

2021 iThome 鐵人賽

DAY 16
0
Modern Web

JavaScript 從 50% 開始,打造函式庫不是問題!系列 第 16

JS 16 - jQuery 太重了,何不選擇需要的功能就好?

  • 分享至 

  • xImage
  •  

大家好!

相信各位都有看到標題了,今天開始就要實作函式庫了。
我們進入今天的主題吧!


jQuery

很久之前,jQuery 因為簡單的寫法和方便的功能而大受歡迎。
但是,對於人們更加重視自我需求的現在,jQuery 卻是載入網頁的絆腳石,原因是當時方便的功能,現在的瀏覽器都能實現了,甚至網頁通常都只會使用到 jQuery 的其中幾個功能而已。

自己的需求只有自己知道,我們何不量身打造一個終身受用的函式庫呢?


jQuery 的簡化核心

首先,為了讓建立的新物件都有共用方法,必須使用建構式:

const Felix = function (selector) {
    /* 不使用 new 運算子也能直接呼叫建構式 */
    if (!(this instanceof Felix)) return new Felix(selector);
    if (!selector) return;
    /* 如果 selector 為字串,視為選擇器;
       反之,則視為物件(window 或 document) */
    selector = typeof selector === 'string' ?
        document.querySelectorAll(selector) :
        [selector];
    /* 將查詢到的元素寫入物件 */
    selector.forEach(function (v, i) {
        this[i] = v;
    }.bind(this));
    this.length = selector.length;
};

試試建立一個新物件:

var body = new Felix('body');
console.log(body, typeof body); // Log: { 0: body, length: 1 }, 'object'

沒錯,這就是我們要的結果,使用 CSS 選擇器查詢網頁元素,並回傳一個新物件。


這樣就完成第一個函式了!

差不多也到尾聲了,接下來我們要打造的是函式庫的共用方法。
如果對文章有任何疑問,也歡迎在下方提問和建議!
我是 Felix,我們明天再見!


上一篇
JS 15 - this 關鍵字
下一篇
JS 17 - 繼承和瀏覽器的小問題
系列文
JavaScript 從 50% 開始,打造函式庫不是問題!46
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言