매우 간단한 JavaScript 이퀄라이저 및 빌더 설명
21819 단어 JavaScript초학자작업 일지tech
이퀄라이저
for...of
는 등 하나하나를 통해 값을 얻을 수 있는 대상(중복 가능한 대상: 배열, 문자열 등)을 가리킨다.균형기는 두 가지가 있는데'중복 가능한 대상','균형기 대상'은 보통 후자를 균형기로 가리킨다.이기종 객체
넥스트 방법을 가지고 있으며, 이 방법을 호출하여 요소를 하나하나 추출할 수 있는 대상을 말한다.
next()
를 호출할 때 반환값으로 배열값value
과 done
을 되돌려줍니다.done
의 true, 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
하지만 접수는어디야?
Reference
이 문제에 관하여(매우 간단한 JavaScript 이퀄라이저 및 빌더 설명), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/unemployed/articles/javascript-iterator-generator텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)