この記事では、JavaScript のイテレータに関する関連知識を提供します。イテレータとは何なのか、そしてそれをカスタマイズする方法を見てみましょう。皆さんのお役に立てれば幸いです。
1. イテレータとは何ですか?
- Iterator は、さまざまなデータ構造に統一されたアクセス メカニズムを提供するインターフェイス メカニズムです。 (つまり、トラバーサルをサポートしていない一部のデータ構造をトラバース可能にするため)
最も一般的なのは、配列内の値を順番に返す Array イテレータです。
let arr = [1,2,3,4,5];for (let val of arr) { console.log(val);}
2. カスタム反復子
それでは、どのように反復子を実装すればよいでしょうか?
まず、次の 2 つの点を満たす必要があります:
- 反復可能なプロトコル
- 反復子プロトコル
反復可能プロトコル
反復可能プロトコルを使用すると、JavaScript オブジェクトで反復動作を定義またはカスタマイズできます
反復可能プロトコルを満たすにはどうすればよいですか?
反復可能オブジェクトになるには、オブジェクトは @@iterator メソッドを実装する必要があります。
これは、オブジェクト (またはそのプロトタイプ チェーン上のオブジェクト) には、キー @@iterator を持つプロパティが必要であることを意味します。このプロパティには、定数 Symbol.iterator を通じてアクセスできます。
つまり、反復可能なプロトコルを満たすには、オブジェクトに Symbol.iterator
という名前のキーを持つプロパティがあり、それを反復可能なオブジェクトにする必要があります。
イテレータ プロトコル
イテレータ プロトコルは、一連の値 (有限数または無限数) を生成する標準的な方法を定義します。
値の数が限られている場合、すべての値が反復された後、デフォルトの戻り値が返されます。
反復プロトコルを満たすにはどうすればよいでしょうか?
オブジェクトは、反復子オブジェクト IteratorResult
を返す next()
メソッドを少なくとも 1 つ実装する必要があります。この反復子オブジェクトには、done
と ·value
という 2 つのプロパティが含まれています。
- done:
反復子がシーケンス内の次の値を生成できる場合は False。
イテレータがシーケンスの反復を終了した場合は True - value
イテレータによって返される値。 Done が true の場合は Done を省略できます
次に、イテレータのカスタマイズを開始しましょう
上記のように、イテレータをカスタマイズしたい場合は、Iterator次の 2 つの条件を満たす必要があります:
- 反復可能なオブジェクトになります。つまり、
Symbol.iterator
属性
を持ちます (つまり、反復可能なプロトコル: Symbol.iterator)。 ) - イテレータ オブジェクトは
next()
メソッドを返します。このnext()
メソッドはvalue
とdone を含むオブジェクトを返します
プロパティのオブジェクト
(つまり、イテレータ プロトコル: return { next() { return { value, Done } })
let colors = { blue : "蓝色", green : "绿色", yellow : "黄色"}
colors は反復不可能なオブジェクトになりました。 use for... of がそれを走査すると、イテレータをカスタマイズできます。
次に、実装を開始します:
colors[Symbol.iterator] = function() { let keys = Object.keys(colors); // 如果用 let keys = Reflect.ownKeys(colors),keys 就会包括一些不可枚举的属性 // 那么后面的 len 要减一,减去Symbol.iterator这个属性 // 根据实际情况选择使用 let len = keys.length; let index = 0; return { next : function() { if (index < len) { return { value : colors[keys[index++]], done : false } } return { done : true } } }}
検証してみましょう:
for (let val of colors) { console.log(val);}
[関連する推奨事項: javascript 学習チュートリアル]
以上がJavaScript イテレータとは何かを 10 分で理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

Dreamweaver Mac版
ビジュアル Web 開発ツール

ホットトピック



