国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目次
ライブラリのフレームワークを作成します
概念の簡単な議論
エンコーディングに戻ります
テキストとHTMLを使用します
操作クラス
プロパティを使用します
要素を作成します
添付要素と接続された要素
要素を削除します
使用イベント
使用ライブラリ
それでおしまい!
ホームページ ウェブフロントエンド jsチュートリアル 最初のJavaScriptライブラリを構(gòu)築します

最初のJavaScriptライブラリを構(gòu)築します

Mar 11, 2025 am 12:09 AM

最初のJavaScriptライブラリを構(gòu)築します

Reactの魔法に驚いたことがありますか? Dojoがどのように機(jī)能するのか疑問に思ったことはありませんか? jqueryの巧妙な操作に興味を持ったことはありますか?このチュートリアルでは、舞臺(tái)裏でこっそりとjqueryの超順調(diào)なバージョンを構(gòu)築しようとします。

JavaScriptライブラリをほぼ毎日使用しています。アルゴリズムの実裝、API抽象化の提供、またはDOMの操作など、ライブラリはほとんどの最新のWebサイトで多くの機(jī)能を?qū)g行します。

このチュートリアルでは、このようなライブラリをゼロから構(gòu)築しようとします(もちろん、これは単純化されたバージョンです)。 JQueryと同様に、DOMオペレーション用のライブラリを作成します。はい、それは楽しいですが、興奮する前に、いくつかのポイントを明確にさせてください:

  • これは完全に機(jī)能的なライブラリではありません。しっかりした一連の方法を書くつもりですが、これは完全なjQueryではありません。ライブラリを構(gòu)築するときに遭遇する問題の種類を十分に理解するのに十分なことをします。
  • ここでは、すべてのブラウザにわたって完全な互換性を追求していません。今日書いたコードは、Chrome、Firefox、およびSafariで実行されるはずですが、IEなどの古いブラウザでは動(dòng)作しない場(chǎng)合があります。
  • ライブラリのあらゆる目的をカバーするわけではありません。たとえば、 prependメソッドは、ライブラリインスタンスを渡す場(chǎng)合にのみ有効です。

  1. ライブラリのフレームワークを作成します

モジュール自體から始めます。 Webでコードをインポートおよびエクスポートする最新の方法であるECMAScriptモジュール(ESM)を使用します。

ドームをエクスポートする{
    コンストラクター(セレクター){

    }
}

ご覧のとおり、コンストラクターがパラメーターを受け入れるDomeと呼ばれるクラスをエクスポートしますが、複數(shù)のタイプの場(chǎng)合があります。文字列の場(chǎng)合、CSSセレクターであると仮定しますが、単一のDOMノードまたはdocument.querySelectorAllの結(jié)果を受け入れることもできます。要素検索を簡素化することもできます。 lengthプロパティがある場(chǎng)合、ノードのリストがあることがわかります。これらの要素をthis.elementsに保存します。 Domeオブジェクトは複數(shù)のDOM要素をラップできます。ほぼすべての方法で各要素をループする必要があるため、これらのユーティリティは非常に便利です。

パラメーター、コールバック関數(shù)を取得するmap関數(shù)から始めましょう。配列內(nèi)のアイテムDomeループし、コールバック機(jī)能によって返されるコンテンツを収集します。

また、 forEachメソッドが必要です。デフォルトでは、 mapOneへの呼び出しを単純に転送できます。この関數(shù)が何をしているのかは簡単にわかりますが、本當(dāng)の問題は、なぜそれが必要なのかということです。これには、「ライブラリコンセプト」と呼ばれるものが少し必要です。

概念の簡単な議論

ライブラリの構(gòu)築がコードを書くだけである場(chǎng)合、それほど難しくないでしょう。しかし、このプロジェクトに取り組んでいるとき、私が見つけたより困難な部分は、特定の方法がどのように機(jī)能するかを決定することでした。

まもなく、複數(shù)のDOMノード( $("li").text() )をラップするDomeオブジェクトを構(gòu)築すると、すべての要素テキストを連結(jié)したすべての要素を含む文字列が取得されます。これは便利ですか?そうは思いませんが、より良い返品値が何であるかわかりません。

このプロジェクトでは、配列に1つのアイテムのみがある場(chǎng)合を除き、複數(shù)の要素のテキストを配列として返します。単一の要素のテキストを最も頻繁に入手できると思うので、この狀況に合わせて最適化しました。ただし、複數(shù)の要素のテキストを取得している場(chǎng)合は、使用できるものを返します。

エンコーディングに戻ります

したがって、 mapOne最初にmapを呼び出してから、配列または配列に単一のアイテムを返します。これがどのように機(jī)能するかわからない場(chǎng)合は、ご期待ください:表示されます!

 mapone(コールバック){
    const m = this.map(callback);
    m.length> 1を返しますか?
};
  1. テキストとHTMLを使用します

次に、 textメソッドを追加して、設(shè)定または取得しているかどうかを確認(rèn)しましょう。これは、要素を繰り返してテキストを設(shè)定していることに注意してください。取得している場(chǎng)合、要素のmapOneメソッドを返します。複數(shù)の要素に取り組んでいる場(chǎng)合、これは配列を返します。

htmlメソッドは、 innerHTMLを使用することを除いて、 textメソッドとほぼ同じです。

 html(html){
    if(typeof html!== "undefined"){
        this.foreach(function(el){
            el.innerhtml = html;
        });
        これを返します。
    } それ以外 {
        this.mapone(function(el)を返します{
            return el.innerhtml;
        });
    }
}

私が言ったように:ほとんど同じです。


  1. 操作クラス

次に、クラスを追加および削除できるようにしたいので、 addClassremoveClassメソッドを書きましょう。

addClassメソッドは、各要素のclassList.addメソッドを使用します。文字列を渡すときにそのクラスのみが追加され、配列を渡すときに配列を繰り返し、そこに含まれるすべてのクラスを追加します。

 addclass(classes){
    return this.foreach(function(el){
        if(typeofクラス!== "string"){
            for(const elclass of classes){
                el.classlist.add(elclass);
            }
        } それ以外 {
            el.classlist.add(classes);
        }
    });
}

とてもシンプルですよね?

さて、クラスを削除するのはどうですか?このためには、ほぼ同じことを行いますclassList.removeメソッドを使用してください。

  1. プロパティを使用します

次に、 attr関數(shù)を追加しましょう。これは、 htmlメソッドとほぼ同じであるため簡単です。これらの方法と同様に、同時(shí)にプロパティを取得および設(shè)定することができます。設(shè)定するプロパティ名と値を1つ、取得するプロパティ名は1つだけです。

 attr(attr、val){
    if(typeof val!== "未定"){
        return this.foreach(function(el){
            el.setattribute(attr、val);
        });
    } それ以外 {
        this.mapone(function(el)を返します{
            return el.getattribute(attr);
        });
    }
}

valが定義されている場(chǎng)合、 setAttributeメソッドを使用します。それ以外の場(chǎng)合は、 getAttributeメソッドを使用します。

  1. 要素を作成します

新しい要素を作成できるはずであり、優(yōu)れたライブラリはそれを行うことができます。もちろん、これはDomeクラスの方法として意味がありません。

エクスポート関數(shù)Create(tagname、attrs){

}

ご覧のとおり、要素の名前と屬性オブジェクトの2つのパラメーターを受け入れます。ほとんどのプロパティはattrメソッドを介して適用され、テキストコンテンツはtextメソッドを介してDomeオブジェクトに適用されます。これらすべての実際のアクションは次のとおりです。

エクスポート関數(shù)Create(tagname、attrs){
    let el = new Dome([document.createelment(tagname)]);
    if(attrs){
        for(key in attrs){
            if(attrs.hasownproperty(key)){
                el.attr(key、attrs [key]);
            }
        }
    }
    Elを返します。
}

ご覧のとおり、要素を作成し、新しいDomeオブジェクトに直接送信します。

しかし、今、私たちは新しい要素を作成しています、私たちはそれらをDOMに挿入したいと思うでしょう?

  1. 添付要素と接続された要素

次に、 appendのメソッドをprependします。これらの機(jī)能は、主に複數(shù)のユースケースがあるため、少し注意が必要です。これが私たちができることを紹介します:

 dome1.append(dome2);
dome1.prendy(dome2);

添付またはプレフィックスを添付する場(chǎng)合があります。

  • 1つ以上の既存の要素の新しい要素
  • 1つ以上の既存の要素に対する複數(shù)の新しい要素
  • 1つ以上の既存の要素に対する既存の要素
  • 1つ以上の既存の要素に対する複數(shù)の既存の要素

「新しい」を使用して、既存の要素がまだDOMにない要素を表しています。今すぐ説明しましょう:

 append(els){

}

els Domeオブジェクトになることを期待しています。完全なDOMライブラリは、ノードまたはノードのリストとしてそれを受け入れますが、それを行いません。それぞれの要素を繰り返す必要があり、その中に、取り付けたい各要素を通過します。

追加すると、パラメーターとして渡された外部Domeオブジェクトからのiには、元の(除外)ノードのみが含まれます。したがって、単一の要素のみを単一の要素に追加する場(chǎng)合、関係するすべてのノードはそれぞれのprepend方法の一部になります。

  1. 要素を削除します

完全性については、 removeメソッドを追加しましょう。 removeChildメソッドを使用する必要があるため、これは非常に簡単です。物事を容易にするために、 forEachメソッドを使用してループを逆転させます。各要素のDomeオブジェクトremoveChild 、アプリを適切に使用したり、DOMに接したりすることができます。悪くないよね?

  1. 使用イベント

最後になりましたが、イベントハンドラー機(jī)能をいくつか書きます。

onメソッドをチェックしてください。説明してください。

 on(evt、fn){
    return this.foreach(function(el){
        El.AddeventListener(EVT、FN、FALSE);
    });
}

これは非常に簡単です。要素を繰り返し、 addEventListenerメソッドを使用するだけです。 off関數(shù)(イベントハンドラーを外す)はほぼ同じです。

 off(evt、fn){
    return this.foreach(function(el){
        El.RemoveEventListener(EVT、FN、FALSE);
    });
}

  1. 使用ライブラリ

Domeを使用するには、スクリプトに入れてインポ??ートするだけです。

 "./dome.js"から{dome、create}をimport

そこから、次のように使用できます。

新しいドーム( "li")
...

インポートするスクリプトがESモジュールであることを確認(rèn)してください。

それでおしまい!

私たちの小さなライブラリを試してみて、少し拡張できることを願(yuàn)っています。先に述べたように、私はそれをgithubに置いた。お?dú)葺Xにフォークしたり、プレイしたり、プルリクエストを送信したりしてください。

もう一度明確にしましょう。このチュートリアルの目的は、常に自分のライブラリを書く必要があることを提案することではありません。大規(guī)模で成熟したライブラリを可能な限り優(yōu)れたものにするために、協(xié)力して獻(xiàn)身的なチームがあります。ここでの目的は、ライブラリ內(nèi)で何が起こるかについての洞察を與えることです。

お?dú)荬巳毪辘违楗ぅ芝楗辘蚓颏晗陇菠毪长趣驈?qiáng)くお?jiǎng)幛幛筏蓼?。あなたは彼らがあなたが思うほど神秘的ではないことに気付くでしょう、そしてあなたは多くを?qū)Wぶかもしれません。ここにいくつかの良い出発點(diǎn)があります:

  • jqueryソースコード(ポールアイリッシュ)から學(xué)んだ11のこと
  • JQueryの舞臺(tái)裏(James Padolsey)
  • React16:APIの互換性の深いフロントエンドUIライブラリの書き換え

この投稿は、ジェイコブジャクソンの貢獻(xiàn)により更新されました。ジェイコブは、ウェブ開発者、ハイテクライター、フリーランサー、オープンソースの寄稿者です。

以上が最初のJavaScriptライブラリを構(gòu)築しますの詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見つけた場(chǎng)合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Java vs. JavaScript:混亂を解消します Java vs. JavaScript:混亂を解消します Jun 20, 2025 am 12:27 AM

JavaとJavaScriptは異なるプログラミング言語であり、それぞれ異なるアプリケーションシナリオに適しています。 Javaは大規(guī)模なエンタープライズおよびモバイルアプリケーション開発に使用されますが、JavaScriptは主にWebページ開発に使用されます。

JavaScriptコメント:短い説明 JavaScriptコメント:短い説明 Jun 19, 2025 am 12:40 AM

JavaScriptcommentsEareEssentialential-formaining、およびGuidingCodeexecution.1)single-linecommentseared forquickexplanations.2)多LinecommentsexplaincomplexlogiCorprovidededocumentation.3)clarifyspartsofcode.bestpractic

JSで日付と時(shí)間を操作する方法は? JSで日付と時(shí)間を操作する方法は? Jul 01, 2025 am 01:27 AM

JavaScriptで日付と時(shí)間を処理する場(chǎng)合は、次の點(diǎn)に注意する必要があります。1。日付オブジェクトを作成するには多くの方法があります。 ISO形式の文字列を使用して、互換性を確保することをお?jiǎng)幛幛筏蓼埂?2。時(shí)間情報(bào)を取得および設(shè)定して、メソッドを設(shè)定でき、月は0から始まることに注意してください。 3.手動(dòng)でのフォーマット日付には文字列が必要であり、サードパーティライブラリも使用できます。 4.ルクソンなどのタイムゾーンをサポートするライブラリを使用することをお?jiǎng)幛幛筏蓼埂¥长欷椁沃匾圣荪ぅ螗趣蛄?xí)得すると、一般的な間違いを効果的に回避できます。

JavaScript vs. Java:開発者向けの包括的な比較 JavaScript vs. Java:開発者向けの包括的な比較 Jun 20, 2025 am 12:21 AM

javascriptispreferredforwebdevelopment、whilejavaisbetterforlge-scalebackendsystemsandroidapps.1)javascriptexcelsininintingtivewebexperiences withitsdynAmicnature anddommanipulation.2)javaofferstruntypyping-dobject-reientedpeatures

なぜの下部にタグを配置する必要があるのですか? なぜの下部にタグを配置する必要があるのですか? Jul 02, 2025 am 01:22 AM

PLACSTHETTHETTHE BOTTOMOFABLOGPOSTORWEBPAGESERVESPAGESPORCICALPURPOSESESFORSEO、userexperience、andDesign.1.IthelpswithiobyAllowingseNStoAccessKeysword-relevanttagwithtagwithtagwithtagwithemaincontent.2.iTimrovesexperiencebyepingepintepepinedeeping

JavaScript:効率的なコーディングのためのデータ型の調(diào)査 JavaScript:効率的なコーディングのためのデータ型の調(diào)査 Jun 20, 2025 am 12:46 AM

javascripthassevenfundamentaldatypes:number、string、boolean、undefined、null、object、andsymbol.1)numberseadouble-precisionformat、有用であるため、有用性の高いものであるため、but-for-loating-pointarithmetic.2)ストリングリムムット、使用率が有用であること

DOMでのイベントの泡立ちとキャプチャとは何ですか? DOMでのイベントの泡立ちとキャプチャとは何ですか? Jul 02, 2025 am 01:19 AM

イベントキャプチャとバブルは、DOMのイベント伝播の2つの段階です。キャプチャは最上層からターゲット要素までであり、バブルはターゲット要素から上層までです。 1.イベントキャプチャは、AddEventListenerのUseCaptureパラメーターをTrueに設(shè)定することにより実裝されます。 2。イベントバブルはデフォルトの動(dòng)作であり、UseCaptureはfalseに設(shè)定されているか、省略されます。 3。イベントの伝播を使用して、イベントの伝播を防ぐことができます。 4.イベントバブルは、動(dòng)的なコンテンツ処理効率を改善するためにイベント委任をサポートします。 5.キャプチャを使用して、ロギングやエラー処理など、事前にイベントを傍受できます。これらの2つのフェーズを理解することは、タイミングとJavaScriptがユーザー操作にどのように反応するかを正確に制御するのに役立ちます。

JavaとJavaScriptの違いは何ですか? JavaとJavaScriptの違いは何ですか? Jun 17, 2025 am 09:17 AM

JavaとJavaScriptは、異なるプログラミング言語です。 1.Javaは、エンタープライズアプリケーションや大規(guī)模なシステムに適した、靜的に型付けされ、コンパイルされた言語です。 2。JavaScriptは動(dòng)的なタイプと解釈された言語であり、主にWebインタラクションとフロントエンド開発に使用されます。

See all articles