매우 간단한 JavaScript 이퀄라이저 및 빌더 설명

이퀄라이저

for...of는 등 하나하나를 통해 값을 얻을 수 있는 대상(중복 가능한 대상: 배열, 문자열 등)을 가리킨다.균형기는 두 가지가 있는데'중복 가능한 대상','균형기 대상'은 보통 후자를 균형기로 가리킨다.

이기종 객체


넥스트 방법을 가지고 있으며, 이 방법을 호출하여 요소를 하나하나 추출할 수 있는 대상을 말한다.next()를 호출할 때 반환값으로 배열값valuedone을 되돌려줍니다.donetrue, false를 참조하여 스토리지에 값이 있는지 확인할 수 있습니다.

반복 가능 객체

[Symbol.iterator] 실현 방법을 통해 균형기 대상을 되돌려준다.이 같은 일을 실시함으로써 반복할 수 있는 대상을 만들 수 있다.

배열을 이퀄라이저 객체로 변환합니다.


설정配列.values()을 통해 배열을 균형기 대상으로 변환할 수 있습니다.그러나 2016년 12월에는 크롬 등이 시행되지 않았다.
const book =[
	"hi",
	"jiro"
];

cosnt it = book.values();
console.log(it.next());
console.log(it.next());
console.log(it.next());

//実行結果
Object { value:"hi", done: false }
Object { value:"jiro", done: false }
Object { value:undefined, done: true }

//while文での実行
const book1 =[
	"hi",
	"taro"
];
cosnt it1 = book1.values();
let current = it1.next();
while(!current.done) {
	console.log(current.value);
	current = it.next();
}
Object { value:"hi", done: false }
Object { value:"taro", done: false }

원격 프로토콜


사용 방법values를 통해 중복 가능한 진열을 균형기values()로 변환할 수 있지만 균형기로서 필요한 균형기 프로토콜을 실현하여 어떻게 된 일인지 확인할 수 있습니다.
class Log {
	constructor() {
		this.messages = [];
	}
	add(messages) {
		const now = Data.now();
		console.log(`ログ追加: ${message} (${now})`);
		this.messages.push({ message, timestamp: now })
	}
	[Symbol.iterator]() {
		//イテレータオブジェクトに変換して返す。
		return this.messages[Symbol.iterator]();
	}
}

const log = new Log();
log.add("海の監視初日。勤務開始");
setTimeout(function() {log.add("クジラを見た");}, 3*1000);
setTimeout(function() {log.add("船を見た");}, 7*1000);
setTimeout(function() {log.add("監視終了");}, 9*1000);
setTimeout(function() {
	cosole.log(`本日の業務報告 (${new Date()})`);
	for(let entry of log) {
		const data new Data(entry.timestamp);
		console.log(`${entry.message} (${date})`);
	}
}, 10*1000);

생성기


생성기가 일반 함수와 동시에 호출되지 않으면 즉시 실행되지 않으며, 우선 균형기를 되돌려줍니다.이후 균형기 방법인next를 호출할 때마다 실행이 진행됩니다.
로 정의됩니다.그 외에 일반 함수와 같은 문법을 사용할 수 있다.그러나 Arrow 함수는 사용할 수 없습니다.그리고 호출자에게 값을 제공하는 경우 키워드 yeld를 사용합니다.function* 関数名도 사용되지만 생성기 함수에서는 반환 값에 사용되지 않습니다.
function* colors() {
	yield 'あか';
	yield 'あお';
}

//呼び出し側
const it = colors();
console.log(it.next());// { value: 'あか', done: false }
console.log(it.next());// { value: 'あお', done: false }
console.log(it.next());// { value: undefined, done: true }

영국식과 양방향 교류


생성기를 사용하면 호출자 간에 양방향 교류를 할 수 있다.yeld는 방정식이기 때문에 그 결과는 어떤 값이 될 것이다.어떤 값인지 말하자면next가 호출할 때의 매개 변수입니다.
상기 코드return라면 상기 코드에 따라 아래 코드를 보십시오.
function* itterrogate() {
	const name = yield "お名前は?";//最初のnextではyield手前で止まる。次のnextの時にyieldに引数を返してnameに代入される。
	const color = yield "お好きな色は何ですか?";//2回目のnextはyield手前まで止まる。3回目のnextでcolorに引数が代入される。
	return `${name}さんの好きな色は${color}だそうです。`;
}

const it itterrogate();
console.log(it.next());//{ value: 'お名前は?', done: false } ここでは引数を渡しても無視される。
console.log(it.next(めぐみ));//{ value: 'お好きな色な何ですか', done: false }
console.log(it.next(あお));//{ value: 'めぐみさんの好きな色はあおだそうです。', done: true }
console.log(it.next());//{ value: undefined, done: true }
생성기의 어느 곳에서 호출yield = next()の引数が入る할 때done는 진짜로 변하고value 속성은return이 지정한 값으로 변한다.주의해야 할 것은 return 문법으로 회전하면 진짜가 발생할 때 순환을 종료하고value를 출력하지 않는다는 것이다.따라서 for...of에서 의미 있는 값을 전달하는 것을 최대한 피해야 한다.

인용하다


1)Ethan Brown. Learning JavaScript, 3rd Edition. O'Reilly. 이슨 브라운 무스시로 눈 2017.제12장.첫 번째 자바스크립트.제3판.오리 일본.pp 197-209.
JavaScript의 균형기 극대화! -Qiita
보도에 대한 평론 등
🕊:
📺:
📸:
👨🏻‍💻: Github
😥: Stackoverflow
하지만 접수는어디야?

좋은 웹페이지 즐겨찾기