ES6 ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ², Π½ΠΎ ΡΡΠΎ Π½Π΅ ΠΎΡΡΠ°ΠΆΠ΅Π½ΠΎ Π² ΡΠ°ΠΉΠ»Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ TypeScript (lib.es6.d.ts).
Π€ΡΠ½ΠΊΡΠΈΠΈ ΡΠ°Π±ΠΎΡΡ Ρ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ filter ΠΈ slice, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΌΠ°ΡΡΠΈΠ² ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠ°, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡΡΡ Π² TypeScript:
class MyArray extends Array {
get size() { return this.length; }
}
var x = new MyArray(10).slice();
x.size;
Π€ΡΠ½ΠΊΡΠΈΠΈ reverse, concat, slice, splice, filter Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠΈΠΏ this.
Π€ΡΠ½ΠΊΡΠΈΡ 'map' ΡΠ°ΠΊΠΆΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΏΠΎΠ΄ΡΠΈΠΏΠ°, Π½ΠΎ Ρ Π½Π΅ Π·Π½Π°Ρ, ΠΊΠ°ΠΊ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Π² TypeScript, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π² Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠΌ ΡΠΈΠΏΠ΅, ΡΡΠΎ-ΡΠΎ Π²ΡΠΎΠ΄Π΅:
map<U>(callback: (value: T, index: number, array: this) => U): this<U>
ΠΡΡΠ³Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° - ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ ΠΊΠ»Π°ΡΡΠ° Array, ΠΎΠ½ΠΈ ΡΠΎΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠΎΠ²Π°ΡΡΡΡ:
var x = MyArray.of(1,2,3);
var y = MyArray.from([1,2,3]);
x.size;
y.size;
ΠΡΡΡ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ @ @species , ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΈΠ³Π½Π°ΡΡΡΡ ΡΠΈΠΏΠ° ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠ°, ΡΡΠΎΠ±Ρ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ this Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΠ°ΠΊΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠ°ΠΊ filter ΠΈ slice. ΠΡΠ°ΠΊ, Π΄Π»Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ ΡΠΈΠΏΡ Π² ΡΠ°ΠΉΠ»Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ:
class MyArray2 extends Array {
static get [Symbol.species]() { return Array; }
}
Π Chrome, ΠΈ Node.js ΡΠΆΠ΅ ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ², ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΡΠ΅ Π·Π΄Π΅ΡΡ.
ΠΡΠΎ Π±ΡΠ΄Π΅Ρ ΡΠ»ΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ TypeScript Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π½Π°Π·Π½Π°ΡΠ°ΡΡ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠΈ Π½Π° ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠ½ΡΠ΅ this
. Π‘ΠΌ. β 6223 (ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΡΡΠΈΡΠ°ΡΡ ΠΎΠ±ΠΌΠ°Π½ΠΎΠΌ).
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Π² ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡΠ΅ Π²Ρ Π²Π²ΠΎΠ΄ΠΈΡΠ΅ Π΄ΡΡΠ³ΠΎΠΉ ΠΎΠ±ΡΠΈΠΉ ΡΠ»ΠΎΡ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠ½ΡΠΉ this
? ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π²Ρ ΡΠΎΠ·Π΄Π°Π΅ΡΠ΅ ΠΏΠΎΠ΄ΠΊΠ»Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΠΌΠ΅Π΅Ρ Π΄Π΅Π»ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ², Π³Π΄Π΅ ΠΎΠ±ΡΠΈΠΉ T
ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ T[][]
. ΠΠΎ ΠΎΠ±ΡΠΈΠΉ ΡΠ»ΠΎΡ Π² Array
this
Π±ΡΠ΄Π΅Ρ T[]
, ΠΊΠ°ΠΊ Π²Ρ Π²ΡΡΠ°Π·ΠΈΡΠ΅ ΡΡΠΎ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΡΡΠΎ Π²ΡΠ΅Π³Π΄Π° ΡΠ°Π±ΠΎΡΠ°Π»ΠΎ?
Π ΡΠΏΠΎΠΌΡΠ½ΡΡΠΎΠΉ Π²ΡΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅ Π΅ΡΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ Π»ΠΎΠΌΠ°Π΅ΡΡΡ Π² ΡΠΎΡΠ΅ΡΠ°Π½ΠΈΠΈ Ρ Π΄ΠΆΠ΅Π½Π΅ΡΠΈΠΊΠ°ΠΌΠΈ.
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ 'map' Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°ΠΊΠ°Ρ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΎΠ±ΡΡΠΆΠ΄Π°Π΅ΠΌΠ°Ρ Π² "ΠΠΎΠ»ΠΈΠΌΠΎΡΡΠ½ΠΎΠΌ 'this' ΠΈ Generics", Π½ΠΎ Π²ΡΠ΅ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Array ΠΌΠΎΠ³ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, ΠΏΡΠΎΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Ρ 'this'.
Π ΠΌΠ΅ΡΠΎΠ΄Ρ Array.from ΠΈ Array.of ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΊΠΎΡΠΎΡΡΡ ΡΠ°ΠΊΠΆΠ΅ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° TypeScript, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΌΠ½Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ArrayConstructor Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΡΡΠ»Π°ΡΡΡΡ Π½Π° 'this' ΠΌΠ°ΡΡΠΈΠ²Π° ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ.
ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ΅ΡΠ΅Π½Ρ ΠΏΡΡΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ° Array
. ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ΅Π½ ΡΠΏΠΎΡΠΎΠ± ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° (https://github.com/Microsoft/TypeScript/issues/183), ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Array
ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΡ. Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΡΡΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΡΡΠΎΠΏΠΎΡΠΈΠ»ΠΎΡΡ Π² TC39, Π½ΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ Π΅Π³ΠΎ Π²Π΅ΡΡΠΈΡ Π΄Π»Ρ Π²Π½Π΅ΡΠ½ΠΈΡ
ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ. Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ.
Π² ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ this
Π²ΠΌΠ΅ΡΡΠΎ T[]
Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ. Π― ΡΡΠΈΡΠ°Ρ, ΡΡΠΎ sort
ΡΠΆΠ΅ Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎ.
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ΅ΡΠ΅Π½Ρ ΠΏΡΡΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ°
Array
. ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ΅Π½ ΡΠΏΠΎΡΠΎΠ± ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° (https://github.com/Microsoft/TypeScript/issues/183), ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡArray
ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΊΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΡ. Π ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ, ΡΡΠΎ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΡΡΠΎΠΏΠΎΡΠΈΠ»ΠΎΡΡ Π² TC39, Π½ΠΎ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°ΡΡ Π΅Π³ΠΎ Π²Π΅ΡΡΠΈΡ Π΄Π»Ρ Π²Π½Π΅ΡΠ½ΠΈΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ. Π― Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ.Π² ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅
this
Π²ΠΌΠ΅ΡΡΠΎT[]
Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ. Π― ΡΡΠΈΡΠ°Ρ, ΡΡΠΎsort
ΡΠΆΠ΅ Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΎ.