Nội dung
- Trình tạo ID
Thứ hai, 07/11/2016 | 00:00 GMT+7

Chức năng của Trình tạo trong JavaScript với ES6 / ES2015


Với các hàm của trình tạo trong ES2015 (ES6), giờ đây ta có thể xác định các hàm có thể trả về nhiều giá trị với sự trợ giúp của từ khóa lợi nhuận . Đây là một ví dụ về một hàm máy phát điện đơn giản:

function* someGenerator(){
  yield 'Cats';
  yield 'Dogs';
  yield 'Birds';
}

Lưu ý việc sử dụng ký tự * bên cạnh từ khóa hàm , để cho biết đó là một hàm tạo.

Bây giờ, hãy tạo một version của trình tạo và extract các giá trị từ nó bằng cách gọi next () trên trình tạo và nhận giá trị:

const gen = someGenerator();

console.log(gen.next().value); // Cats
console.log(gen.next().value); // Dogs
console.log(gen.next().value); // Birds
console.log(gen.next().value); // Undefined

next () trả về một đối tượng có giá trị và một boolean được gọi là done trả về true nếu trình tạo không có giá trị:

const gen2 = someGenerator();

console.log(gen2.next().done); // false
console.log(gen2.next().done); // false
console.log(gen2.next().done); // false
console.log(gen2.next().done); // true

Trình tạo ID

Bạn có thể sử dụng vô hạn khi đang ở trong một hàm của trình tạo để tạo một hàm sẽ tạo ID mới mỗi khi next () được gọi trên nó. Trong trường hợp này, vòng lặp vô hạn không nguy hiểm vì nó sẽ chỉ thực thi một lần với các lệnh gọi tới next () :

function* idGen(){
  let i = 0;
  while (true) {
    yield ++i;
  }
}

const myIdGen = idGen();

console.log(myIdGen.next().value); // 1
console.log(myIdGen.next().value); // 2
console.log(myIdGen.next().value); // 3
console.log(myIdGen.next().value); // 4

Tags:

Các tin liên quan

Tham số phần còn lại trong JavaScript với ES6 / ES2015
2016-11-02
Hứa hẹn trong JavaScript với ES6 / ES2015
2016-10-31
Chữ mẫu trong JavaScript (ES6 / ES2015)
2016-10-11
console.table () trong JavaScript
2016-09-28
console.time () & console.timeEnd () trong JavaScript
2016-09-28
Phương thức chuỗi toLowerCase () và toUpperCase trong JavaScript
2016-08-29
Loại bỏ JavaScript chặn hiển thị với Async và Defer
2016-08-20
Toán tử bậc ba trong JavaScript
2016-08-14
Cách quản lý phụ thuộc JavaScript và CSS Front-End với Bower trên Ubuntu 14.04
2015-08-26