yield*
في JavaScript
التعبير yield*
يُستخدَم لتفويض التنفيذ إلى دالة مولِّدة أخرى أو كائن iterable.
البنية العامة
yield* [[expression]];
expression
التعبير الذي سيُعيد كائن iterable.
الوصف
سيؤدي التعبير yield*
إلى المرور على عناصر الكائن ويعطي كل قيمة أعادها هذا الكائن.
قيمة التعبير yield*
نفسه هي القيمة المُعادة من الكائن iterable عند إغلاقه (أي عندما تكون قيمة الخاصية done
هي true
).
أمثلة
تفويض التنفيذ إلى دالة مولِّدة أخرى
لاحظ أنَّ القيمة التي تعطيها (yield) الدالة g1()
ستُعاد عند استدعاء الدالة next()
مثل القيم التي تعطيها الدالة g2()
:
function* g1() {
yield 2;
yield 3;
yield 4;
}
function* g2() {
yield 1;
yield* g1();
yield 5;
}
var iterator = g2();
console.log(iterator.next()); // {value: 1, done: false}
console.log(iterator.next()); // {value: 2, done: false}
console.log(iterator.next()); // {value: 3, done: false}
console.log(iterator.next()); // {value: 4, done: false}
console.log(iterator.next()); // {value: 5, done: false}
console.log(iterator.next()); // {value: undefined, done: true}
كائنات itreable الأخرى
يمكن استخدام التعبير yield*
لإعطاء قيمة لكائنات iterable، مثل المصفوفات والسلاسل النصية وكائن arguments
(الوسائط المُمرَّرة إلى الدالة):
function* g3() {
yield* [1, 2];
yield* '34';
yield* Array.from(arguments);
}
var iterator = g3(5, 6);
console.log(iterator.next()); // {value: 1, done: false}
console.log(iterator.next()); // {value: 2, done: false}
console.log(iterator.next()); // {value: "3", done: false}
console.log(iterator.next()); // {value: "4", done: false}
console.log(iterator.next()); // {value: 5, done: false}
console.log(iterator.next()); // {value: 6, done: false}
console.log(iterator.next()); // {value: undefined, done: true}
قيمة التعبير yield*
نفسه
لاحظ أنَّ yield*
هو تعبير (expression) وليس تعبير برمجي (statement)، لذا ستكون له قيمة:
function* g4() {
yield* [1, 2, 3];
return 'foo';
}
var result;
function* g5() {
result = yield* g4();
}
var iterator = g5();
console.log(iterator.next()); // {value: 1, done: false}
console.log(iterator.next()); // {value: 2, done: false}
console.log(iterator.next()); // {value: 3, done: false}
console.log(iterator.next()); // {value: undefined, done: true},
// g4() returned {value: 'foo', done: true}
console.log(result); // "foo"
دعم المتصفحات
الميزة | Chrome | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
الدعم الأساسي | نعم | نعم | غير مدعومة | نعم | 10 |
على النقيض من متصفح IE، يدعم متصفح Edge هذه الميزة.
مصادر ومواصفات
- مسودة المعيار ECMAScript Latest Draft.
- معيار ECMAScript 2015 (6th Edition).