Three.js: ES6 рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдЬрд╛рдирд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 2 рдЕрдЧре░ 2020  ┬╖  88рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: mrdoob/three.js

рдирдорд╕реНрддреЗ,

рдореИрдВрдиреЗ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдмрдирд╛рдирд╛ рдЙрдЪрд┐рдд рд╕рдордЭрд╛ (#11552 рдХреЛ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп) рддрд╛рдХрд┐ рдИрдПрд╕6 рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЗ рдореБрджреНрджреЛрдВ рдФрд░ рдкреНрд░рдЧрддрд┐ рдкрд░ рдирдЬрд╝рд░ рд░рдЦрдиреЗ рдФрд░ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдореЗрдВ рд╕рднреА рдХреА рд╕рд╣рд╛рдпрддрд╛ рдХреА рдЬрд╛ рд╕рдХреЗред рдпрд╣ рд░рд┐рд▓реАрдЬ рдбреЙрдХ рдХреЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдЖрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдорджрдж рдХрд░рдиреЗ рдХреЗ рдЗрдЪреНрдЫреБрдХ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдиреАрдЪреЗ рджреА рдЧрдИ рд╕реВрдЪреА рдХреЛ рджреЗрдЦреЗрдВ рдФрд░ рд╣рдореЗрдВ рдмрддрд╛рдПрдВ рдХрд┐ рдЖрдк рдХрд┐рд╕ рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдкреНрд░рддрд┐ рд╡рд░реНрдЧ рдПрдХ рдкреАрдЖрд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреБрдЫ рдлрд╝реЛрд▓реНрдбрд░ рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ ред рдпрджрд┐ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдиреЛрдЯ рдмрдирд╛рдПрдВ , рдпрд╛ рдореБрдЭреЗ рдЕрдкрдиреЗ рдкреАрдЖрд░ рд╕реЗ рдкрд┐рдВрдЧ рдХрд░реЗрдВ рдФрд░ рдореИрдВ рдЗрд╕реЗ рдиреАрдЪреЗ рдиреЛрдЯ рдХрд░реВрдВрдЧрд╛ред

рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ:

  • Class.prototype.is** рдХреЗ рд▓рд┐рдП Object.defineProperty( this, 'is**', { value: true } ); . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
  • рдЙрдкрдпреБрдХреНрдд рд╣реЛрдиреЗ рдкрд░ рд╡рд░реНрдЧ рдлрд╝реАрд▓реНрдб рднреА рдЙрдкрд▓рдмреНрдз рд╣реИрдВ #20395
  • new this.contructor() != new Foo() ... рд╕рдВрдмрдВрдзрд┐рдд рдЪрд░реНрдЪрд╛ ред
  • рдорд░реНрдЬ рд╣реЛрдиреЗ рдФрд░ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЯрд┐рдХ рдХрд░ рджреЗрдВрдЧреЗред

рднрд╛рдЧ 1: рд╕реНрд░реЛрдд

рд╣рдо рдЕрднреА рднрд╛рдЧ 2 рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИрдВред рдЪрд░реНрдЪрд╛ рдХреА рдЬрд░реВрд░рдд рд╣реИред

рднрд╛рдЧ 2: рдЙрджрд╛рд╣рд░рдг

  • [ ] рдЙрджрд╛рд╣рд░рдг

    • [] рдПрдирд┐рдореЗрд╢рди

    • [] рдХреИрдорд░реЗ

    • [] рдирд┐рдпрдВрддреНрд░рдг

    • [] рдШрдЯрддрд╛

    • [] рдкреНрд░рднрд╛рд╡

    • [ ] рдирд┐рд░реНрдпрд╛рддрдХ

    • [] рдЬреНрдпрд╛рдорд┐рддрд┐

    • [] рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡

    • [] рд░реЛрд╢рдиреА

    • [] рд▓рд╛рдЗрдиреЗрдВ

    • [] рд▓реЛрдбрд░

    • [ ] рдЧрдгрд┐рдд

    • [] рд╡рд┐рд╡рд┐рдз

    • [] рд╕рдВрд╢реЛрдзрдХ

    • [] рд╡рд╕реНрддреБрдПрдВ

    • [ ] рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рдмрд╛рдж

    • [] рд░реЗрдВрдбрд░рд░реНрд╕

    • [] рд╢реЗрдбрд░реНрд╕

рднрд╛рдЧ 3: рдвреАрд▓реЗ рд╕рд┐рд░реЗ рдФрд░ рд╕рд╛рдл-рд╕реБрдерд░реЗ

  • [ ] рд╕реНрд░реЛрдд/рдХреЛрд░/рдСрдмреНрдЬреЗрдХреНрдЯ3рдбреА
    ...

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

@ianpurvis рдмрдврд╝рд┐рдпрд╛! рдХреНрдпрд╛ рдЖрдк рд░реЛрд▓рдЕрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣реИ рдирд╛? рдХреНрдпрд╛ рдЖрдк рдЕрдкрдиреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

@mrdoob рдореИрдВ рдЕрдВрдд рдореЗрдВ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛ рдЧрдпрд╛ред рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╡реЗрдмрдкреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП, рдореЗрд░реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдпрд╣ рд╣реИ рдпрджрд┐ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рд▓реЗрддрд╛ рд╣реИ ред

рдореИрдВрдиреЗ рдЗрд╕ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛

import * as THREE from 'three'

console.log(THREE.WebGLRenderer)

0.119.1

0 119 1

0.120.1

0 120 1

рддреЛ рдХреБрдЫ рдкреЗрдбрд╝ рдХреЛ рд╣рд┐рд▓рд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдмрдврд╝рд┐рдпрд╛!

рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рджреЗрдЦрдиреЗ рдкрд░, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрдЧ AudioListener рдмрдВрдбрд▓ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдЕрдЪреНрдЫреА рдЦрдмрд░ рд╣реИ!

Screenshot 2020-09-01 at 16 49 22

Screenshot 2020-09-01 at 16 50 07

рд╡реЗрдмрдкреИрдХ @ianpurvis рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдП рдЧрдП рдЕрдкреНрд░рдпреБрдХреНрдд рдЪрд░реЛрдВ рдХреЛ рднреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред


рдЗрд╕рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдХрдХреНрд╖рд╛ рдХреЗ рдмрд╛рд╣рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛

Screenshot 2020-09-01 at 16 50 37

рдФрд░ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рд╡рд░реНрдЧ рдХреЛ рдЧреИрд░-рдкреЗрдбрд╝-рд╣рд┐рд▓рд╛рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рддрд╛ рд╣реИ

Screenshot 2020-09-01 at 16 51 04


рдХреБрдЫ рдФрд░ рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЬреНрдпрд╛рдорд┐рддрд┐ рд╡рд░реНрдЧ рдЬреИрд╕реЗ DodecahedronGeometry , рдЬреЛ рдХрд╣реАрдВ рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рдереЗ, рдЕрднреА рднреА рдмрдВрдбрд▓ рдореЗрдВ рдереЗ

Screenshot 2020-09-01 at 16 51 29

Screenshot 2020-09-01 at 16 52 08

рдмрд╛рдж рдореЗрдВ рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛, рдпрд╣ three.module.js рдмрдВрдбрд▓ рдореЗрдВ рдЗрд╕ Geometries рд╡рд╕реНрддреБ рдХреЗ рдХрд╛рд░рдг рдерд╛

Screenshot 2020-09-01 at 17 18 32

рдЬреЛ ObjectLoader рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред рдЬрдм рд╣рдо ObjectLoader рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рдВрднрд╡рдд: рджреВрд░ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдФрд░ src/geometries рдкреЗрдбрд╝ рдХреЛ рд╣рд┐рд▓рд╛рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдЧрд╛ред

рд╕рднреА 88 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореИрдВ рдмрд╛рдХреА рдСрдбрд┐рдпреЛ рдлреЛрд▓реНрдбрд░ рдкрд░ dibs рдХреЛ рдХреЙрд▓ рдХрд░реВрдБрдЧрд╛

рдЕрд░реЗ @mrdoob , рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рд╣рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

рдореИрдВ #19989 рдХреЛ рд╕реАрдзреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдкрд╕рдВрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ utils/modularize.js рдХреЛ рдЕрдм рдЙрд╕ рдХрд╛рдо рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд┐рдП рдмрд┐рдирд╛ examples/js рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рд╣рдорд╛рд░реЗ examples/js рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рдЕрдВрдд рдФрд░ рдХреЗрд╡рд▓ examples/jsm рдХреА рд╢реБрд░реБрдЖрдд рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реИ?

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреЗрдВ

рдХреНрдпрд╛ рдореИрдВ рдмрд╛рдХреА рдЧрдгрд┐рдд рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ?

рдХреНрдпрд╛ рдореИрдВ рдмрд╛рдХреА рдЧрдгрд┐рдд рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБ?

рдореИрдВ рдЖрдк рд╕рднреА рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдПрдХ рд╢реЙрдЯ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реВрдБред рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ рд▓реЗрдХрд┐рди @ Mugen87 рдиреЗ рдореБрдЭреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд╣ рджрд┐рдпрд╛ред рдЬреИрд╕реЗ рд╣реА рдЖрдк рдЬрд╛рддреЗ рд╣реИрдВ рдЗрд╕рдХрд╛ рддреНрд╡рд░рд┐рдд рд╕рд╛рд░рд╛рдВрд╢ рдкрд░реАрдХреНрд╖рдг рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдкреВрд░реЗ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдПрдХ рдмрд╛рд░ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рдЦреБрдж рдХреЛ рдХрд┐рд╕реА рди рдХрд┐рд╕реА рд╕рд╡рд╛рд░реА рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдлрд╝рд╛рдЗрд▓ рджреНрд╡рд╛рд░рд╛ рдЖрдВрд╢рд┐рдХ, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ, рдореБрдЭреЗ рдпрдХреАрди рд╣реИред

@рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╢рд╛рдпрдж рдореИрдВ рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ src/animation/ рдХреЗ рддрд╣рдд рдФрд░ рдХреНрдпрд╛ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

src/core рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛: https://github.com/mrdoob/three.js/pull/20008

рдЕрдЪреНрдЫрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдлрд╝реЛрд▓реНрдбрд░ рд▓рдЧрднрдЧ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ src/core/Object3D.js рдФрд░ src/core/BufferGeometry.js рдмрдЪреЗ рд╣реЛрдВ?

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ src/core/Object3D.js рдФрд░ src/core/BufferGeometry.js рдмрдЪреЗ рд╣реЛрдВ?

рд╣рд╛рдВ, рдмрд╣реБрдд рд╕реЗ ES5 рд╡рд░реНрдЧ Object3D рдФрд░ BufferGeometry рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВред

рд░реЗрдВрдбрд░рд░реНрд╕: https://github.com/mrdoob/three.js/pull/20011

рдЧреЛрд▓реА рдорд╛рд░реЛ, рдЗрд╕ рдкрд░ рдХреБрдЫ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдкреНрд░рдЧрддрд┐ рд╣реБрдИ рд╣реИ

Dibs рдХреЛ src/lights рдкрд░ рдХреЙрд▓ рдХрд░реЗрдВред рдКрдкрд░ рдХреА рд╕реВрдЪреА рдореЗрдВ src/extras рдФрд░ src/renderers рдХреЛ рдЦреЛрд▓рд╛, рддреЛ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдлрд╝реЛрд▓реНрдбрд░реНрд╕ рд╣реИрдВред

рд╕рднреА рдХреЛ рдкреНрд░рдгрд╛рдо,

рд╣рдо рдЗрд╕ рдкреИрдЯрд░реНрди рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдХреНрдпрд╛ рдХрд░ рд░рд╣реЗ рдереЗ?

foo.prototype = Object.assign( Object.create( bar.prototype ), {
    ...
    isDirectionalLight: true,
    ...
} );

рдХреНрдпрд╛ рдЕрднреА рд╣реЛ рд░рд╣рд╛ рд╣реИ:

class foo extends bar {
  static isDirectionalLight = true;
  constructor(  ) {
    ...
  }
}

рдпрд╛

class foo extends bar {
  constructor(  ) {
    this.isDirectionalLight = true;
  }
}

рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдореИрдВ рджреВрд╕рд░рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди рдЗрд╕реЗ рджреЗрдЦрдХрд░, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдЗрд╕рдХрд╛ рдЗрд░рд╛рджрд╛ рдкрд╣рд▓реЗ рдХреЗ рдХрд░реАрдм рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рдкрддрд╛ рд╣реИ рдХрд┐ рдЗрди рдЪрд░реЛрдВ рдХрд╛ рдкрд╣рд▓реА рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рдерд╛?

class foo extends bar {
  constructor(  ) {
    this.isDirectionalLight = true;
  }
}

я╕П рдпрд╣ рд╕рд╣реА рд╣реИред isDirectionalLight рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рддрд░рд╣ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

$ git grep 'isDirectionalLight\b' src/ examples/js ':!*.ts'
examples/js/exporters/GLTFExporter.js:                  if ( light.isDirectionalLight ) {
examples/js/exporters/GLTFExporter.js:                  } else if ( object.isDirectionalLight || object.isPointLight || object.isSpotLight ) {
examples/js/renderers/SVGRenderer.js:                   } else if ( light.isDirectionalLight ) {
examples/js/renderers/SVGRenderer.js:                   if ( light.isDirectionalLight ) {
src/lights/DirectionalLight.js: isDirectionalLight: true,
src/renderers/webgl/WebGLLights.js:                     } else if ( light.isDirectionalLight ) {

рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдХреБрдЫ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдЧреБрдгреЛрдВ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рд▓рд╛рдн рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ...

class foo extends bar {
}
foo.prototype.baz = heavyThing;

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдорд╛рдорд▓реЗ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдкреАрдЖрд░ рдореЗрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░ рд╕рдХреЗрдВред

рдореИрдВ src/renderers/webgl рдкрд░ рдПрдХ рд╢реЙрдЯ рд▓реВрдВрдЧрд╛

рдЧреБрдб рд▓рдХ рдордЬреЗ рдХрд░реЛред рдЗрд╕рдореЗрдВ рдХрд╛рдлреА рдХреБрдЫ рдЪрд▓ рд░рд╣рд╛ рд╣реИ

рд╡реЗрдмрдПрдХреНрд╕рдЖрд░: https://github.com/mrdoob/three.js/pull/20038

рд╣реЗ рд╕рдм- рдореБрдЭреЗ src/renderers/webgl рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдкрд╛рдЧрд▓рдкрди рдерд╛ред рдореИрдВ рд╣рд░ рдЪреАрдЬ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд░рд╣реВрдВрдЧрд╛ рдФрд░ рдкреАрдЖрд░ рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ #20039 рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░реВрдВрдЧрд╛ред

рдореИрдВ
рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ

рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ @yomotsu рдиреЗ рдЧрдгрд┐рдд рдкреАрдЖрд░ рдореЗрдВ is* рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓-рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рдЧреЗрдЯрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ ... рд╢рд╛рдпрдж рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ!

class foo extends bar {
  get isDirectionalLight() {
    return true;
  }
}

рд╣рдореНрдо рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреНрдп рд▓реЛрдЧреЛрдВ рдиреЗ рдЪрд░реЛрдВ рдХреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рд╣реИред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рд╕реБрдВрджрд░ рд╕рднреНрдп рдкреИрдЯрд░реНрди рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред

рддреНрд╡рд░рд┐рдд jsfiddle рд╢реЛ рдХреЗрд╕

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрд╛рдиреЗ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рд╣реИ:

foo.prototype.isDirectionalLight = true;

src/objects рдореЗрдВ рджреЗрдЦрдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ рдореИрдВ рдЪреАрдЬреЛрдВ рдХреЛ рддреЛрдбрд╝реЗ рдмрд┐рдирд╛ рдХрд┐рддрдиреА рджреВрд░ рдЬрд╛ рд╕рдХрддрд╛ рд╣реВрдВред

рдЧрдгрд┐рдд рдлрд╝реЛрд▓реНрдбрд░ рдЕрднреА рдкреВрд░рд╛ рд╣реБрдЖ рдерд╛ред
( рдЗрдВрдЯрд░рдкреЛрд▓реЗрдЯ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред )

рд╕рднреА рдХреЛ рдкреНрд░рдгрд╛рдо,
рдореИрдВ src/objects рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдкреАрдЫреЗ рд╣рдЯрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, рдЗрд╕ рдмреАрдЪ рдЗрд╕реЗ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдФрд░ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИред

рдЕрд░реЗ, рдЗрди рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫрд╛ рдХрд╛рдо! рдореИрдВ

рд╕рд┐рд░реНрдл рдПрдХ рдореБрджреНрджрд╛, foo.prototype.isDirectionalLight = true; рдЕрднреА рднреА рдкреЗрдбрд╝ рдХреЛ рд╣рд┐рд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд░реНрдЧ рдХреЛ рдЬрдЧрд╣ рдореЗрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛ рдХрд┐ рдЕрдм рд╣рдо рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛ рди рдЫреВрдПрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЕрднреА рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЛ рд╕рд╛рд░рдЧрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕ рдкреИрдЯрд░реНрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рджрд┐рдЦрддрд╛ рд╣реИред

constructor( x = 0, y = 0, z = 0 ) {

  Object.defineProperty( this, 'isVector3', {
    value: true,
    enumerable: false,
    writable: false,
    configurable: false,
  } );

рд▓рдШреБ рд╕рдВрд╕реНрдХрд░рдг рднреА рд╣реИ, рдЬреЛ рд╡рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдирд┐рд╣рд┐рдд рд╣реИред

constructor( x = 0, y = 0, z = 0 ) {

  Object.defineProperty( this, 'isVector3', { value: true } );

@marcofugaro рд▓рдШреБ рд╕рдВрд╕реНрдХрд░рдг рдореБрдЭреЗ рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ

рдареАрдХ рд╣реИ, рдкреАрдЖрд░ рдХрд┐рдпрд╛ред

рд╕рд╛рде рд╣реА, рдореИрдВрдиреЗ рдЕрднреА рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХреНрд▓рд╛рд╕ рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЗрд╕ рдкреАрдЖрд░ рджреНрд╡рд╛рд░рд╛ рдЕрд╡рд░реБрджреНрдз рд╣реИрдВред

рдореИрдВ рдЕрдзрд┐рдХ рд▓реЛрдХрдкреНрд░рд┐рдп @ рд░реЛрд▓рдЕрдк/рдкреНрд▓рдЧрдЗрди-рдмреЗрдмреЗрд▓ . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдб рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ

рдореИрдВ рдЕрдзрд┐рдХ рд▓реЛрдХрдкреНрд░рд┐рдп @ рд░реЛрд▓рдЕрдк/рдкреНрд▓рдЧрдЗрди-рдмреЗрдмреЗрд▓ . рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдб рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ
рдФрд░ рдЕрдЧрд░ рдЖрдк рд▓реЛрдЧ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░реЗрдВред

рд╣рд╛рдБ, рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдПрдХ рдкреАрдЖрд░ рдХрд░ рд╕рдХреЗрдВ ЁЯЩП

@marcofugaro , @mrdoob рдпрд╛рдп! рд╣рд╛рдБ рдХреГрдкрдпрд╛

рд╣реЗ рд╕рдм рд▓реЛрдЧ, рддреНрд╡рд░рд┐рдд рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВрдиреЗ #20014 рдХреЛ Object.defineProperty рдХреЗ рд╕рд╛рде рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ AnimationClip рдХреЗ рдЙрдкрд╡рд░реНрдЧ рдХреЛ рднреА рдареАрдХ рдХрд┐рдпрд╛ рд╣реИред рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдЗрд╕рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ, рддреЛ рдореИрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВ

рдареАрдХред рдЕрдм рдЬрдмрдХрд┐ r120 рдЦрддреНрдо рд╣реЛ рдЧрдпрд╛ рд╣реИ... рдХреНрдпрд╛ рдХреЛрдИ рдЬрд╛рдВрдЪ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЪреАрдЬреЗрдВ рдареАрдХ рд╕реЗ рдЯреНрд░реА-рд╣рд┐рд▓ рд╣реЛ рд░рд╣реА рд╣реИрдВ?

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдереЛрдбрд╝рд╛ рд╕рд╛ред
рдореБрдЭреЗ рд╡реЗрдмрдкреИрдХ рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рдмрдВрдбрд▓ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЕрдм ArrowHelper рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХрдИ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЛрдб рдЕрднреА рднреА рдореМрдЬреВрдж рд╣реИрдВЁЯШв

рдмрдВрдбрд▓ рдЖрдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ? рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рдж рдореЗрдВ

рд╣реЗ рд╕рдм рд▓реЛрдЧ, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рдЪрд╛рд░ рдерд╛ рдФрд░ рд╢реЗрдХрдбрд┐рдл рдирд╛рдордХ рдПрдХ рдЙрдкрдХрд░рдг рдХреЛ рдиреБрдХреАрд▓рд╛ рдХрд┐рдпрд╛ред рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:

$ shakediff builds/three.module.js Color

рдпрд╣ Color рдЖрдпрд╛рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдЫреЛрдЯрд╛ рдореЙрдбреНрдпреВрд▓ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛, рдЗрд╕реЗ рддреАрди рдХреЗ рд╕рд╛рде рдмрдВрдбрд▓ рдХрд░реЗрдЧрд╛, рдФрд░ рдлрд┐рд░ рд░реЛрд▓рдЕрдк рдХреЗ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╕реЗ рддреАрди рдХрд╛ рдЕрдВрддрд░ рдмрдирд╛рдПрдЧрд╛ред рдЖрдк рдпрд╛ рддреЛ рд╡рд┐рд╕реНрддреГрдд рдЕрдВрддрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ diffstat рдкрд░ рдкрд╛рдЗрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

$ shakediff build/three.module.js Color | diffstat 
 three.module.js | 2878 --------------------------------------------------------
 1 file changed, 1 insertion(+), 2877 deletions(-)

рдЕрднреА рдХреЛрдИ рдкреИрдХреЗрдЬ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдЗрд╕реЗ рдореЗрд░реЗ рд░реЗрдкреЛ рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХреА! я╕П

npm -g i ianpurvis/shakediff.git

рдЕрд░реЗ @mrdoob , рдХреНрдпрд╛ рдЖрдк рдХреГрдкрдпрд╛ рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рд╣рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?
рдореИрдВ рдкрд╕рдВрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ #19989 рд╕реАрдзреЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рд▓рд┐рдП рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ utils/modularize.js рдЕрдм рдЙрд╕ рдХрд╛рдо рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдЙрджрд╛рд╣рд░рдг/js рдлрд╝реЛрд▓реНрдбрд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдЙрджрд╛рд╣рд░рдгреЛрдВ/рдЬреЗрдПрд╕ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдФрд░ рдХреЗрд╡рд▓ рдЙрджрд╛рд╣рд░рдгреЛрдВ/рдЬреЗрдПрд╕рдПрдо рдХреА рд╢реБрд░реБрдЖрдд рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рдЕрдВрдд рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реИ?

рдЗрд╕ рдкрд░ рдХреНрдпрд╛ рдлреИрд╕рд▓рд╛ рд╣реИ @mrdoob? рдХреНрдпрд╛ рдЬреЗрдПрд╕рдПрдо рдХреЛ рд╕рддреНрдп рдХрд╛ рд╕реНрд░реЛрдд рдмрдирд╛рдирд╛ рд╕рдордЭрджрд╛рд░реА рд╣реЛрдЧреА рддрд╛рдХрд┐ рд╣рдо рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ ES6 рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдмрджрд▓ рд╕рдХреЗрдВ? рд╢рд╛рдпрдж рд╣рдо рджреВрд╕рд░реА рджрд┐рд╢рд╛ рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП utils/demodularize.js рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ?

examples/js рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рджрд┐рд╕рдВрдмрд░ 2020 рдореЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рддрдм рддрдХ, рд╣рдореЗрдВ рдлрд╝реЛрд▓реНрдбрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдП рдмрд┐рдирд╛ - рдпрд╛ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рд╕реЗ рдЙрддреНрдкрдиреНрди examples/jsm рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ - ES6 рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд┐рдП рдмрд┐рдирд╛, рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рд╡реИрд╕реЗ рд╣реА рдЫреЛрдбрд╝ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрд╕ рддрд┐рдерд┐ рдХреЗ рдмрд╛рдж, examples/jsm рдлрд╛рдЗрд▓реЗрдВ рд╕рддреНрдп рдХрд╛ рд╕реНрд░реЛрдд рдмрди рдЬрд╛рдПрдВрдЧреА, рдФрд░ рдЙрдиреНрд╣реЗрдВ ES6 рдХреНрд▓рд╛рд╕реЗрд╕ рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдорд┐рд▓рд╛рддреЗ рд╣реБрдП рдореЙрдбреНрдпреВрд▓-рд╕реНрдХреЛрдк рдЪрд░ рдХреЛ рд╣рдЯрд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдЖрдк рдЗрди рдЪрд╛рд░ рд╡рд░реНрд░реЛрдВ рдХреЗ рд╕рд╛рде рд╡реНрдпрд╡рд╣рд╛рд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, build/three.module.js:43059

const _position$3 = new Vector3();
const _quaternion$4 = new Quaternion();
const _scale$2 = new Vector3();
const _orientation$1 = new Vector3();

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЗрди рд╢реБрджреНрдз рдХреЛ рд╡рд┐рд╢реЗрд╖ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП-

const _position = /*@__PURE__*/ new Vector3();

рдХреНрдпрд╛ рдпрд╣ рд╕рдмрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?

рдореБрдЭреЗ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ

рдЕрдЪреНрдЫрд╛ рд╣реИ, рдЬрдм рдкреЗрдбрд╝ Color . рдХреЗ рд╕рд╛рде рд╣рд┐рд▓рддрд╛ рд╣реИ рддреЛ рдПрдХ рдФрд░ 144 рд▓рд╛рдЗрдиреЗрдВ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ

рдХреГрдкрдпрд╛ рд╣рд░ рдХреЛрдИ рдЖрдкрдХреЗ рдЦреБрд▓реЗ рдкреАрдЖрд░ рдХреЛ /*@__PURE__*/ рдЙрдкрдЪрд╛рд░ рджреЗрдВ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рдордп рд╣реЛ!

@ianpurvis рдмрдврд╝рд┐рдпрд╛! рдХреНрдпрд╛ рдЖрдк рд░реЛрд▓рдЕрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣реИ рдирд╛? рдХреНрдпрд╛ рдЖрдк рдЕрдкрдиреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

@mrdoob рдореИрдВ рдЕрдВрдд рдореЗрдВ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛ рдЧрдпрд╛ред рдореИрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╡реЗрдмрдкреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП, рдореЗрд░реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдпрд╣ рд╣реИ рдпрджрд┐ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рд▓реЗрддрд╛ рд╣реИ ред

рдореИрдВрдиреЗ рдЗрд╕ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛

import * as THREE from 'three'

console.log(THREE.WebGLRenderer)

0.119.1

0 119 1

0.120.1

0 120 1

рддреЛ рдХреБрдЫ рдкреЗрдбрд╝ рдХреЛ рд╣рд┐рд▓рд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдмрдврд╝рд┐рдпрд╛!

рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рджреЗрдЦрдиреЗ рдкрд░, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрдЧ AudioListener рдмрдВрдбрд▓ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдЕрдЪреНрдЫреА рдЦрдмрд░ рд╣реИ!

Screenshot 2020-09-01 at 16 49 22

Screenshot 2020-09-01 at 16 50 07

рд╡реЗрдмрдкреИрдХ @ianpurvis рджреНрд╡рд╛рд░рд╛ рдмрддрд╛рдП рдЧрдП рдЕрдкреНрд░рдпреБрдХреНрдд рдЪрд░реЛрдВ рдХреЛ рднреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИред


рдЗрд╕рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдХрдХреНрд╖рд╛ рдХреЗ рдмрд╛рд╣рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛

Screenshot 2020-09-01 at 16 50 37

рдФрд░ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рд╡рд░реНрдЧ рдХреЛ рдЧреИрд░-рдкреЗрдбрд╝-рд╣рд┐рд▓рд╛рдиреЗ рдпреЛрдЧреНрдп рдмрдирд╛рддрд╛ рд╣реИ

Screenshot 2020-09-01 at 16 51 04


рдХреБрдЫ рдФрд░ рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЬреНрдпрд╛рдорд┐рддрд┐ рд╡рд░реНрдЧ рдЬреИрд╕реЗ DodecahedronGeometry , рдЬреЛ рдХрд╣реАрдВ рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рдереЗ, рдЕрднреА рднреА рдмрдВрдбрд▓ рдореЗрдВ рдереЗ

Screenshot 2020-09-01 at 16 51 29

Screenshot 2020-09-01 at 16 52 08

рдмрд╛рдж рдореЗрдВ рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛, рдпрд╣ three.module.js рдмрдВрдбрд▓ рдореЗрдВ рдЗрд╕ Geometries рд╡рд╕реНрддреБ рдХреЗ рдХрд╛рд░рдг рдерд╛

Screenshot 2020-09-01 at 17 18 32

рдЬреЛ ObjectLoader рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред рдЬрдм рд╣рдо ObjectLoader рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рдВрднрд╡рдд: рджреВрд░ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдФрд░ src/geometries рдкреЗрдбрд╝ рдХреЛ рд╣рд┐рд▓рд╛рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдЧрд╛ред

@marcofugaro рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ, рдпреЗ рд░рд╣рд╛ рд░реЛрд▓рдЕрдк рдХреЙрдиреНрдлрд┐рдЧрд░

@marcofugaro рд╣рд╛рдп, рдореИрдВрдиреЗ рд╢реЗрдХрдбрд┐рдл рдореЗрдВ рд╡реЗрдмрдкреИрдХ рд╕рдкреЛрд░реНрдЯ рдЬреЛрдбрд╝рд╛ рд╣реИ... рдХреНрдпрд╛ рдпрд╣ рд╡реЗрдмрдкреИрдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЖрдкрдХреЛ рдареАрдХ рд▓рдЧрддрд╛ рд╣реИ? рдЪреВрдВрдХрд┐ рдЯреЗрд░реНрд╕рд░ рд╡реЗрдмрдкреИрдХ рдХреЗ рдЯреНрд░реА-рд╢реЗрдХрд┐рдВрдЧ рдореЗрдВ рдореГрдд рдХреЛрдб рдЙрдиреНрдореВрд▓рди рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрди рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдХреБрдЫ рдкрд░рд┐рд╡рд░реНрддрди рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреЛ рд░реЛрдХрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рд╡реНрд╣реЙрдЯреНрд╕рдПрдк рдбрд┐рд╕реЗрдмрд▓ рд╡рд╛рд▓реЗ рд╣рд┐рд╕реНрдЯреЛрдЧреНрд░рд╛рдо рдПрд▓реНрдЧреЛрд░рд┐рдердо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдкреНрд░рдмрдВрдзрдиреАрдп рд╣реИред рдЖрдЬ рд░рд╛рдд рдПрдХ рддреНрд╡рд░рд┐рдд рдкрд░реАрдХреНрд╖рдг рд╕реЗ, рд╡реЗрдмрдкреИрдХ /*@__PURE__*/ рдФрд░ /*#__PURE__*/ рджреЛрдиреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рдкрд░ рдорд╛рдирдХреАрдХрд░рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХрд▓ рдФрд░...

@ianpurvis рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореБрдЭреЗ рдЕрдкрдиреА рдорд╢реАрди рдкрд░ shakediff рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ ...

Screen Shot 2020-09-22 at 9 59 04 AM

рд╡реИрд╕реЗ рднреА, рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛:

import { WebGLRenderer } from './src/renderers/WebGLRenderer.js';
console.log( new WebGLRenderer() );

рдФрд░ рджреЗрдЦрд╛ рдХрд┐ Geometry рдкреЗрдбрд╝ рдХреЛ рд╣рд┐рд▓рд╛рдпрд╛ рдирд╣реАрдВ рдЬрд╛ рд░рд╣рд╛ рдерд╛ред https://github.com/mrdoob/three.js/pull/20394 рдЗрд╕реЗ рдареАрдХ рдХрд░рддрд╛ рд╣реИред

рдореИрдВрдиреЗ рддрдм рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА:

import { Vector3 } from './src/math/Vector3.js';
console.log( new Vector3() );

рдФрд░ рджреЗрдЦрд╛ рдХрд┐ рд░реЛрд▓рдЕрдк рдЕрдкреНрд░рдпреБрдХреНрдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЯреНрд░реА-рд╢реЗрдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ...

@mrdoob рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдХрдХреНрд╖рд╛ рдХреЗ рддрд░реАрдХреЗ рдХрднреА рднреА рдХрд┐рд╕реА рднреА рдЙрдкрдХрд░рдг рджреНрд╡рд╛рд░рд╛ рдЯреНрд░реА-рд╣рд┐рд▓рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рдмрд┐рд▓реНрд▓реА, рдЙрдиреНрд╣реЗрдВ рдЫреЛрдЯрд╛ рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ!

рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рдЖрдк this['I am a string'] рдЬреИрд╕реА рд╡рд┐рдзрд┐рдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдЖрдк рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдЧреБрдгреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, рдЙрдкрдХрд░рдг рдкрд╣рд▓реЗ рд╕реЗ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдХрд┐рд╕реА рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ (рд╣реЛ рд╕рдХрддрд╛ рд╣реИ this[variable] )ред

рдпрд╣ ES6 рдХреНрд▓рд╛рд╕ рдФрд░ рдлрдВрдХреНрд╢рди рдХреНрд▓рд╛рд╕ рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, three.min.js рдореЗрдВ, рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЕрдЫреВрддрд╛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдареАрдХ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рдХреА рддрд░рд╣

рдФрд░ рдХрд┐рд╕реА рдиреЗ рднреА рдПрдХ рдирд┐рд░реНрдорд╛рддрд╛ "рд╕рдЦреНрдд" рдореЛрдб рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдирд╣реАрдВ рджрд┐рдпрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдЖрдкрд╕реЗ this['I am a string'] рдЬреИрд╕реА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдХреЙрд▓ рди рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХреА рдЬрд╛рддреА рд╣реИ?

рдХреЛрдИ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ тАНя╕П

рд░реЛрд▓рдЕрдк рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рдЪрд░реНрдЪрд╛ рдпрд╣рд╛рдВ рджреА рдЧрдИ рд╣реИ: https://github.com/rollup/rollup/issues/349

рдХрд┐рд╕реА рднреА рдЙрдкрдХрд░рдг рджреНрд╡рд╛рд░рд╛ рдХрдХреНрд╖рд╛ рд╡рд┐рдзрд┐рдпрд╛рдВ рдХрднреА рднреА рдкреЗрдбрд╝-рд╣рд┐рд▓рд╛рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред рдмрд┐рд▓реНрд▓реА, рдЙрдиреНрд╣реЗрдВ рдЫреЛрдЯрд╛ рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ!

рд╡рд┐рд╖рдп рд╕реЗ рдмрд╛рд╣рд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреЗрдж рд╣реИ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рд╕рдВрдХрд▓рдХ рдХреЛ "рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ" рдмрдирд╛рдо "рдирд┐рдЬреА" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ рддреЛ рдЖрдк рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдЯрд╛рдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрддреАрдд рдореЗрдВ рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐рдпреЛрдВ рдкрд░ "_" рдЙрдкрд╕рд░реНрдЧреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред рджреЗрдЦреЗрдВ https://github.com/developit/microbundle/wiki/mangle.jsonред рд▓реЗрдХрд┐рди, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореБрдЭреЗ рдпрд╣ рднреА рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдкреЗрдбрд╝ рдХреЛ рд╣рд┐рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдРрд╕рд╛ рд╣реА рдХреБрдЫ рд╕рдВрднрд╡ рд╣реИред рдореИрдВ

рд╡рд╛рд╣! #20395 рдорд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛! рдЕрдЪреНрдЫрд╛ рд╕рд╛рдорд╛рди @marcofugaro

рдмреЗрдмреЗрд▓ рдФрд░ рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ рдЦрдмрд░!

@ianpurvis рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдореБрдЭреЗ рдЕрдкрдиреА рдорд╢реАрди рдкрд░ рд╢реЗрдХрдбрд┐рдл рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ ...

@mrdoob рдПрдЪрдПрдо, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд╛рд░реНрд╕рд▓ рдХреА fsevents рдХреЗ рдЙрд╕ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рд╣реИ ... рд╢рд╛рдпрдж рдореИрдВ рдЗрд╕реЗ рдХреБрдЫ рдЕрдзрд┐рдХ рдкрд░ рдкрд┐рди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

Fyi, рд╡реЗрдмрдкреИрдХ 5 рдореЗрдВ рдЯреНрд░реА-рд╢реЗрдХрд┐рдВрдЧ рд╕реБрдзрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдВ рдЕрдЪреНрдЫреА рдЬрд╛рдирдХрд╛рд░реА...

Fyi, рд╡реЗрдмрдкреИрдХ 5 рдореЗрдВ рдЯреНрд░реА-рд╢реЗрдХрд┐рдВрдЧ рд╕реБрдзрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдВ рдЕрдЪреНрдЫреА рдЬрд╛рдирдХрд╛рд░реА...

рдкреНрд░рдЧрддрд┐... рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд░реЛрд▓рдЕрдк рдЗрд╕реЗ рднреА рд▓рд╛рдЧреВ рдХрд░реЗрдЧрд╛...

рдирдорд╕реНрддреЗ,

.is**Classname** рд╕рдВрдкрддреНрддрд┐ рдФрд░ this.type = **Classname** рдХреЗ рд▓рдХреНрд╖реНрдп рдХреНрдпрд╛ рд╣реИрдВ?
рдХреНрдпрд╛ рдпрд╣ рдмрд╛рдХреА рдкреБрд░рд╛рдирд╛ рдЫрджреНрдо рд╡рд░реНрдЧ рдкреИрдЯрд░реНрди рдирд╣реАрдВ рд╣реИ?
рдХреНрдпреЛрдВ рди рдЗрд╕рд╕реЗ рдкреВрд░реА рддрд░рд╣ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд▓рд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рддрд░реАрдХреЗ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рдП?

obj instanceof Vector3  // prefer this one for inheritance
// or
obj.constructor === Vector3  // prefer this for no inheritance

рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ, рдИрдПрд╕ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ, рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╣реА рдкреНрд░рдХрд╛рд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдВрдЪ рдпреЛрдЧреНрдп рд╣реЛрдВрдЧреЗ ...

рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд╣рд▓реЗ obj instanceof Vector3 рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рдерд╛ред
рд▓реЗрдХрд┐рди рд░рд┐рдЪ рд╣реИрд░рд┐рд╕ рдиреЗ рдкреЗрдбрд╝ рдХреЛ рд╣рд┐рд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЪреЗрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдФрд░ is* рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛: #9310

рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд╣рд▓реЗ obj instanceof Vector3 рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рдерд╛ред
рд▓реЗрдХрд┐рди рд░рд┐рдЪ рд╣реИрд░рд┐рд╕ рдиреЗ рдкреЗрдбрд╝ рдХреЛ рд╣рд┐рд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЪреЗрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдФрд░ is* рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛: #9310

рдЙрддреНрддрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореИрдВрдиреЗ рдзрд╛рдЧрд╛ рдкрдврд╝рд╛ рдерд╛, рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рдХрд┐рд╕реА рдЕрдиреНрдп рд╡рд░реНрдЧ рдХреЛ рдЗрд╕реЗ рдЯрд╛рдЗрдк-рдЪреЗрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛ рд╕реЗ рдХреНрдпреЛрдВ рдмрдЪрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП ... рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЕрдЧрд░, рдмрдВрдбрд▓ рдХрдХреНрд╖рд╛ рдПрдХреНрд╕ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдЗрд╕ рдмрд╛рдд рд╕реЗ рдЕрд╡рдЧрдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдПрдХ рд╡рд╕реНрддреБ рдПрдХ рд╡рд░реНрдЧ рдмреА рд╣реИ, рдлрд┐рд░ рдХрдХреНрд╖рд╛ рдмреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдХрдо рд╕реЗ рдХрдо рдЙрдХреНрдд рд╡рд╕реНрддреБ рдХреЛ рдХрд┐рд╕реА рддрд░рд╣ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП) рдФрд░ рдЙрд╕реЗ рдмрдВрдбрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд╣реИ рдирд╛?

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, WebGLRenderer рдХреЛ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЬреЛ рдЬреНрдпрд╛рдорд┐рддрд┐ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рд╡рд╣ BufferGeometry рдпрд╛ Geometry рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрднреА рднреА рдЬреНрдпрд╛рдорд┐рддрд┐ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рддреАрди.js рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдХреЗрд╡рд▓ BufferGeometry рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм рд╕рдВрднрд╡ рд╣реЛ рддреЛ рдмрдВрдбрд▓ рд╕реЗ рдЬреНрдпрд╛рдорд┐рддрд┐ (рдФрд░ рдЗрд╕рдХреЗ рдЙрдкрд╡рд░реНрдЧ) рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд░реА-рд╢реЗрдХрд┐рдВрдЧ рдХрд░реЗрдВред

рдПрдХ рджреГрд╢реНрдп рддрд░реАрдХреЗ рд╕реЗ...

рдмрдВрдбрд▓ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдкреИрдЯрд░реНрди WebGLRenderer рд╣рдореЗрд╢рд╛ Geometry рд╢рд╛рдорд┐рд▓ рдХрд░рддрд╛ рд╣реИ:

import { Geometry } from '../core/Geometry.js';
import { BufferGeometry } from '../core/BufferGeometry.js';

if ( geometry instanceof Geometry ) {
} else if ( geometry instanceof BufferGeometry ) {
}

рдпрд╣ рдкреИрдЯрд░реНрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ:

if ( geometry.isGeometry === true ) {
} else if ( geometry.isBufferGeometry === true ) {
}

рд╕рднреА рдХреЛ рдкреНрд░рдгрд╛рдо,

рдЗрд╕реЗ рджреЗрдЦрддреЗ рд╣реБрдП рдпрд╣рд╛рдБ рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдорд╛рд░реЗ рдХреНрдпрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИрдВ?

рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЕрднреА рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдЖрдпрд╛ рд╣реИред рдХреБрдЫ рднреА рдЬреЛ (1) examples/js рдореЗрдВ рдирд╣реАрдВ рд╣реИ рдФрд░ (2) examples/js рдореЗрдВ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдирд╣реАрдВ рд╣реИ, рдЙрд╕реЗ ES6 рдХреНрд▓рд╛рд╕реЗрд╕ рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рд╡рд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рд░рд╣реА рд╣реИ, рддреЛ рд╣рдореЗрдВ рдпрд╣ рддрдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ examples/js рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдХрдм рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реИред

рд╕реНрдореГрддрд┐ рд╕реЗ, рдФрд░ рдПрдХ рддреНрд╡рд░рд┐рдд рдирдЬрд╝рд░ рдХреЗ рдмрд╛рдж рд╣рдордиреЗ рдХрд╛рдлреА рдХреБрдЫ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЕрднреА рднреА рдХреБрдЫ рдкреАрдЖрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рдореЗрдВ рддреИрдпрд╛рд░ рд╣реИрдВред

рдореИрдВ рдЕрдкрдиреА рдирд┐рд░реНрднрд░рддрд╛рдУрдВ/рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд-рдЗрди-рдЙрджрд╛рд╣рд░рдг рд╕реВрдЪреА рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

@рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╢рд╛рдпрдж рдЕрд░реЗ! рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИ, рдЖрдкрдХреА рд╕реВрдЪреА рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рдереАред рдФрд░ @donmccurdy рдХреА рд░рдгрдиреАрддрд┐ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдЖрддреА рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЬреЛ рдХрд╛рдо рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ, рдЙрд╕реЗ рдмрдВрдж рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред # 20070 рд╣рдорд▓рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рд╛рди рдкреАрдЖрд░ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирд┐рдЬреА/рдЫрд┐рдкреЗ рд╣реБрдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ ES6 рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рдгрдиреАрддрд┐ рджреЗ рд╕рдХрддрд╛ рд╣реИ (рд╣рдореЗрдВ renderers/webgl рд╕реЗ ES6 рдореЗрдВ рдкреНрд░рд╡рд╛рд╕ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред рдЕрдЧрд░ рд╣рд░ рдХреЛрдИ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рд╡рд╣рд╛рдВ рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рдЭрдВрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЗрд╕рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдЕрдЪреНрдЫреЗ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рдмрд╕ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдкреНрд░рджрд░реНрд╢рди рдЕрдЪреНрдЫрд╛ рд╣реЛред

рдареАрдХ,
рдореИрдВ рдХреБрдЫ рдкреАрдЖрд░ рд╢реБрд░реВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдИрдПрд╕ рдХрдХреНрд╖рд╛рдУрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ ...
@mrdoob рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдЬреЗрдПрд╕рдПрдо рд╕реЗ рдЬреЗрдПрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ? (рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдЖрдк рд╣рдореЗрдВ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ)

рдЙрджрд╛рд╣рд░рдг рдХреЛрдб рдХреЛ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдмрджрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, #20527, #20529 рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рди рдХреЛ рдкрд╣рд▓реЗ рдорд░реНрдЬ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрд╕ рдХреЛрдб рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдЬреЛ https://github.com/mrdoob/three.js/issues/19986#issuecomment -718308451 рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╢рд░реНрддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИред

@ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдиреЗ рдкрд╣рд▓реА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдХрд╣рд╛ рдерд╛:

  • рдХрдХреНрд╖рд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

1) рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рд╣рд░ рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рд╕ рдлреАрд▓реНрдб рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдЗрд╕ рддрд░рд╣ :

class Light extends Object3D {

    type = 'Light';
    isLight = true;

    color = new Color;
    intensity = 1;

    constructor(color, intensity = 1) {

        super();

        this.color = new Color(color);
        this.intensity = intensity;

    }

    copy() {
        ...
    }
}

... рдпрд╛ рдпрд╣ рдХреЗрд╡рд▓ .is* рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рд╣реИ?

рддреЛ рдлрд┐рд░, 2) рдЦрд╛рд▓реА рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░реНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? ES2015 рдХрд▓реНрдкрдирд╛ рдиреЗ рдХрд╣рд╛ рдХрд┐ рдХреЗрд╡рд▓ super() рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдирд┐рд╣рд┐рдд рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рдмрд╛рд▓ рд╡рд░реНрдЧреЛрдВ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╕рд╛рди рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

class MapControls extends OrbitControls {

    screenSpacePanning = false; // pan orthogonal to world-space direction camera.up

    mouseButtons = { LEFT: MOUSE.PAN, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.ROTATE };

    touches = { ONE: TOUCH.PAN, TWO: TOUCH.DOLLY_ROTATE };

}

рдФрд░ 3) рдирд┐рдЬреА рд╡рд░реНрдЧ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

class OrbitControls extends EventDispatcher {
    ...

    #offset = new Vector3();

    // so camera.up is the orbit axis
    #quat = new Quaternion().setFromUnitVectors( object.up, new Vector3( 0, 1, 0 ) ); <= this will go in constructor because of object.up
    #quatInverse = this.#quat.clone().inverse();

    #lastPosition = new Vector3();
    #lastQuaternion = new Quaternion();

    #twoPI = 2 * Math.PI;

    update() {
        ... ( no more closure and return function here )
    }

}

рдирд╡реАрдирддрдо рдХреНрд░реЛрдо рдЕрдм рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдФрд░ рдирд┐рдЬреА рджреЛрдиреЛрдВ рд╡рд░реНрдЧ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд░рд╣рд╛ рд╣реИ ...

20395

рдкрд╣рд▓реА рдХреБрдВрдЬреА рд╕рднреА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реИред

рдЖрдк рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХрдо рдмрджрд▓рд╛рд╡ рдХрд░рдХреЗ рдХрдо рдкрд░реЗрд╢рд╛рдиреА рдореЗрдВ рдкрдбрд╝реЗрдВрдЧреЗред

@marcofugaro рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдЕрднреА рднреА рдХреБрдЫ рдЪрд░ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдХрдХреНрд╖рд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣реИ рдирд╛?
рдореИрдВ рдЪреАрдЬреЛрдВ рдХреЛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдЬреИрд╕реЗ:

class EdgesGeometry extends BufferGeometry {

    constructor( geometry, thresholdAngle ) {

        super();

        this.type = 'EdgesGeometry';

рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛:

class EdgesGeometry extends BufferGeometry {

    type = 'EdgesGeometry';

    constructor( geometry, thresholdAngle ) {

        super();

рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рд╣рдо рдЬрдЧрд╣ рдХреЗ рдЖрд╕-рдкрд╛рд╕ рдХреБрдЫ рдЕрдиреНрдп рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдВрдЧреЗ, рдЬреИрд╕реЗ рдХрд┐ рдореИрдВ " new this.contructor() != new Foo() " рдореЗрдВ рдХреИрд╕реЗ рднрд╛рдЧрд╛ред

рдирд┐рдЬреА рд╡рд░реНрдЧ рдХреЗ рдХреНрд╖реЗрддреНрд░

рдпрд╣ рдПрдХ рдЪрд▓ рд░рд╣реА рдЪрд░реНрдЪрд╛ рд╣реИред рдЕрдЧрд░ рд╣рдо рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╣рдореЗрдВ рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рд╕рдордп рд▓рдЧреЗрдЧрд╛ред рдореИрдВ рдХрд┐рд╕реА рдРрд╕реЗ рдореБрджреНрджреЗ рдпрд╛ рдЬрдирд╕рдВрдкрд░реНрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдБ рдЬрд┐рд╕рдХреА рдУрд░ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдБред

@marcofugaro рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдЕрднреА рднреА рдХреБрдЫ рдЪрд░ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдХрдХреНрд╖рд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣реИ рдирд╛?
рдореИрдВ рдЪреАрдЬреЛрдВ рдХреЛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдЬреИрд╕реЗ:

рд╣рд╛рдБ рдпрд╣ рдЕрдм рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдо .is* рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЧреИрд░-рдЧрдгрдирд╛ рдпреЛрдЧреНрдп рдФрд░ рдЧреИрд░-рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рдирдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ Object.defineProperty(this, ... рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХреИрд╕реЗ рдЪреЗрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП $#$ Object.defineProperty(this, ... #$ рдХреЗ рдмрдЬрд╛рдп static рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛?

рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдХреИрд╕реЗ рдЪреЗрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдХреНрдпрд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП $#$ Object.defineProperty(this, ... #$ рдХреЗ рдмрдЬрд╛рдп static рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛?

рдореБрдЭреЗ рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛, рдХреНрдпреЛрдВрдХрд┐ obj.is* рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ рдХрдХреНрд╖рд╛ рдкрд░ рд╣реА ...

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдмреЗрдмреЗрд▓ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдХреНрд▓рд╛рд╕ рдлрд╝реАрд▓реНрдб рдХреЛ рдЧреИрд░-рдЧрдгрдирд╛ рдпреЛрдЧреНрдп/рдЧреИрд░-рд▓рд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдЬрд╛рд╡рдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

import { unwrittable, unenumerable } from 'some/decorator/helpers.js'

class Foo {
    @unwrittable<strong i="12">@unenumerable</strong>
    isFoo = true;
}

@ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╢рд╛рдпрдж static рдЧреБрдг рдЕрд▓рдЧ рд╣реИрдВ, рд╡реЗ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рдХрдХреНрд╖рд╛ рд╕реЗ рд╣реА рд╣реИрдВред

class Test {
  static staticProp = true

  constructor() {
    Object.defineProperty(this, 'definedProp', { value: true })
  }
}
const test = new Test()

console.log(test.staticProp, test.definedProp)

рдирддреАрдЬрд╛:

undefined true


рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореИрдВ рдЬреЛ рдХрд╣ рд░рд╣рд╛ рдерд╛ рдЙрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ ...
рд╣рд╛рдВ рд╣рд╛рдВред

рдореЗрд░рд╛ рдореБрдЦреНрдп рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рд╣рдо рдЙрд╕ рдХреЛрдб рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рддреЛ рд╣рдо рдпрд╣рд╛рдВ рд╕реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

class Test {
  constructor() {
    Object.defineProperty(this, 'definedProp', { value: true })
  }
}

рдкреНрд░рддрд┐

class Test {
  static definedProp = true
  constructor() {
  }
}

рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдпрд╣ рдЪреЗрдХ рдХрд╣рд╛рдВ рдФрд░ рдХреНрдпреЛрдВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╣рдо рдЗрд╕реЗ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред

@ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╢рд╛рдпрдж рд╕рдорд╕реНрдпрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реА рд╣реИред рддреЛ рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рд╕реНрдерд┐рд░ рдкреНрд░реЛрдк рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╡рд░реНрдЧ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рд╕реНрдерд┐рд░ рдкреНрд░реЛрдк рдХреНрдпреЛрдВ рд╣реИ? рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдХреНрд╖рд╛ рдХрд╛ рдирд╛рдо рд╣реИ...

obj.constructor.isFoo == true
obj.constructor.name == 'Foo'

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдЗрд╕реЗ рд▓рд┐рдЦрдиреЗ рд╕реЗ рдореИрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдЕрдВрддрд┐рдо рд╢реНрд░реЗрдгреА рдХреЗ рдирд╛рдо рдХреА рддреБрд▓рдирд╛ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ .is* рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ ...

obj.constructor.isFoo || obj.constructor.isBar || obj.constructor.isBaz

рд╕рдВрдкрд╛рджрд┐рдд 2: рд╣рд╛рдБ, рдЕрдВрдд рдореЗрдВ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рднреА рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ ...

let types = getInheritanceNames(obj) // looping each .constructor.prototype.constructor.name
types.contains( 'Foo' ) || types.contains( 'Bar' ) || types.contains( 'Baz' ) 

рдЙрджрд╛рд╣рд░рдг рд╕реЗ

рдЙрдлрд╝ред рдЙрд╕ рдПрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрдврд╝реЗрдВред рд╣рд╛рдБ, рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ рдореИрдВ рдХреНрдпрд╛ рдХрд╣ рд░рд╣рд╛ рдерд╛ред

if ( scope.object.isPerspectiveCamera ) {
...
}
if ( geometry.isBufferGeometry ) {
...
}
if ( material.isShaderMaterial ) {
...
}

рдЕрдзрд┐рдХрд╛рд░ред рджреЛ рдЪреАрдЬрд╝реЗрдВред

  • рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рдмрдЪрд╛ рд╣реИ?

рд╣рдореЗрдВ рдпрд╣ рддрдп рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ examples/js рдХреЛ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдХрдм рдмрджрд▓рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВред

  • рдкреНрд░рдЧрддрд┐ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдХрд░реАрдм рдкрд╣реБрдВрдЪрдирд╛ред

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд╣рдореЗрдВ #20527 рдпрд╛ #20529 рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рджреЛрдиреЛрдВ examples/js рдХреЛ рдЗрд╕рдХреЗ рд╡рд░реНрддрдорд╛рди рд╕реНрд╡рд░реВрдк рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реЛрдВрдЧреЗ, рдЬреЛ рдХрд┐ рд╡рд╣ рдЬрдЧрд╣ рдирд╣реАрдВ рд╣реИ рдЬрд╣рд╛рдВ рд╣рдо рд▓рдХреНрд╖реНрдп рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдореЗрд░рд╛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ examples/js рдХреЛ рдЗрд╕ рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВред рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рд╕ рдореБрд╕реАрдмрдд рдореЗрдВ рд╣реИрдВ...

рдореИрдВ рдХреБрдЫ рдРрд╕рд╛ рдлрд┐рд░ рд╕реЗ рджреЛрд╣рд░рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдЬреЛ @mrdoob рдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдХрд╣рд╛ рдерд╛

рдореИрдВ рдЕрдкрдиреЗ рдкрд╣рд▓реЗ рдШрди рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирдП рд▓реЛрдЧреЛрдВ рдХреЛ рдкреЙрд▓реАрдлрд┐рд▓ рдпрд╛ рдмрдВрдбрд▓рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред

рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рд╕рдордп рд╕реЗ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдХрд┐рд╕реА рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ, рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдФрд░ рдореИрдВ рдХреБрдЫ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рднрд┐рдиреНрди рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВред рд╣рдореЗрдВ рдмрдВрдбрд▓рд░ рдФрд░ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдпрд╣ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдХрд┐ рдХреИрд╕реЗ рддреАрди.рдЬреЗрдПрд╕ рдХреЛ рд╢реБрд░реВ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ред

рд╕рд╛рде рд╣реА, рд╢рд╛рдпрдж рдПрдХ REPL рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд▓реЗрдХрд┐рди Three.js рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ svelte's

рд╣рдореЗрдВ рдпрд╣ рднреА рд╕реНрдкрд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдХреБрдЫ рдЧреИрд░-рд╡рд░реНрдЧ рдкреИрдЯрд░реНрди рдХреЛ рдХреИрд╕реЗ рдмрджрд▓рд╛ рдЬрд╛рдП:

function Foo() {

    this.update = function () {

        var priv = 'foo'

        return function update() {
            ...
        };

    }();

}

рдЖрдИрдПрдордПрдЪрдУ рд╣рдо рдирд┐рдЬреА рд╡рд░реНрдЧ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХреБрдЫ рдкреБрд░рд╛рдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рдкреБрд░рд╛рдиреЗ рдкреИрдЯрд░реНрди рдореЗрдВ рд░реЛрд▓рдЕрдк/рдмреЗрдмреЗрд▓ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕реЗ рдореВрд▓ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ ...

рдЖрдИрдПрдордПрдЪрдУ рд╣рдо рдирд┐рдЬреА рд╡рд░реНрдЧ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХреБрдЫ рдкреБрд░рд╛рдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рдкреБрд░рд╛рдиреЗ рдкреИрдЯрд░реНрди рдореЗрдВ рд░реЛрд▓рдЕрдк/рдмреЗрдмреЗрд▓ рдЯреНрд░рд╛рдВрд╕рдкрд╛рдЗрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕реЗ рдореВрд▓ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ ...

рдореИрдВ рдЗрд╕ рд░рдгрдиреАрддрд┐ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВ, рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд┐рд░реНрдгрдп рдореБрдЦреНрдп рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЙрд╕ рдХреЛрдб рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдардВрдбрд╛ред рдЗрд╕реЗ рдкрд╣рд▓реЗ src рдХреЗ рднреАрддрд░ рджрд┐рдЦрд╛рдирд╛ рдПрдХ рд╡рд┐рдЪрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛рдиреА src рдХреЗ рднреАрддрд░ рд╡рд░реНрдгрд┐рдд @devingfx рдХреЗ рд╕рдорд╛рди рд╣реА рдЕрдЬреАрдм рдкреИрдЯрд░реНрди рдвреВрдВрдвреЗрдВ, рдПрдХ рдкреАрдЖрд░ рдмрдирд╛рдПрдВ рдЬреЛ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдирд┐рдЬреА рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдмреЗрдмрд▓ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ рдЗрд╕рдХреЗ рд╕рд╛рдеред

рдХрд┐рд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рдХреЛрдИ рд╕реБрдЭрд╛рд╡?

рдЦреЛрдЬреЗрдВ: internal , private , readonly

рд░реБрдХреЛ, рдХреНрдпрд╛ рд╕рднреА _* рдЪрд░ рдирд┐рдЬреА рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдереЗ?

...

рдЗрд╕ рдХрдорд░реЗ рдореЗрдВ рдПрдХ рд╣рд╛рдереА src/renderers/WebGLRenderer.js . рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

рдХреИрд╕реЗ WebGLAnimation рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЫреЛрдЯрд╛ рд╡рд░реНрдЧ рд╣реИ... https://github.com/mrdoob/three.js/pull/20070

рдХрд┐рд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рдХреЛрдИ рд╕реБрдЭрд╛рд╡?

рдореИрдВ exemples/js рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реВрдВ рдФрд░ рдореИрдВрдиреЗ рдЗрд╕реЗ OrbitControls рдкрд░ рдкрд╛рдпрд╛ ...

рджрд┐рдЦрд╛рдПрдБ рдХрд┐ рдмреЗрдмреЗрд▓ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИред

рдореБрдЭреЗ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИ рдХрд┐ рдпрд╣ mrDoob рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╡рд┐рдЪрд╛рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рдиреЗ рд╡рд╛рд▓реА рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдирд╣реАрдВ рдХрд░реЗрдЧрд╛

рджрд╛рд╣рд┐рдиреА рдУрд░ред

рдФрд░ рдЙрдлрд╝ред рдореЗрд░рд╛ рджрд┐рдорд╛рдЧ рдХрд╣рд╛рдБ рд╣реИ... examples рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдмрджрд▓рдирд╛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рд╡рд┐рд▓рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП #20527 рдпрд╛ #20529 (рдпрд╛ рдЕрдиреНрдп) рдореЗрдВ рд╕реЗ рдПрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред examples/js рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓рд┐рдП рдЪрд╛рд░реЛрдВ рдУрд░ рдЪрд┐рдкрдХрд╛ рд╣реБрдЖ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде examples/js рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдЫреВрдирд╛ рдПрдХ рдкреВрд░реНрдг рд╕рдВрдЦреНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдЬреЛ рдЖрдИрдИ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рддреЛрдбрд╝ рджреЗрдЧрд╛ ... рдЖрд╣ред

рд░реЛрд▓рдЕрдк/рдмреЗрдмреЗрд▓ рдХреЛ рдкреБрд░рд╛рдиреЗ рдкреИрдЯрд░реНрди рдореЗрдВ рдкрд╛рд░рджрд░реНрд╢реА рдмрдирд╛рдПрдВ

рдЬреЗрдПрд╕ рдкреАрдЖрд░ рдХреЗ рдЙрди рдЬреЗрдПрд╕рдПрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдиреА рд╕реЛрдЪ рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдПрдВ рдФрд░ рд╕рдорд░реНрдерди рдХрд░реЗрдВред рдПрдХ рдмрд╛рд░ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рдмрд╛рдж рд╣рдо examples/jsm рдХреЛ рд▓рдХреНрд╖реНрдп рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

src рдореЗрдВ рдирд┐рдЬреА рдЪрд░ рдЬреЛрдбрд╝рдирд╛ рдЕрднреА рднреА рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЪрд▓реА рдЖ рд░рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛ "рдХреГрдкрдпрд╛ рдЙрди рдЪрд░реЛрдВ рдХреЗ рд╕рд╛рде рди рдЦреЗрд▓реЗрдВ, рдЙрдирдХрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджреНрджреЗрд╢реНрдп рд╣реИ"

рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде examples/js рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рдЫреВрдирд╛ рдПрдХ рдкреВрд░реНрдг рд╕рдВрдЦреНрдпрд╛ рдирд╣реАрдВ рд╣реИред

рдУрд╣, рдореЗрд░рд╛ рдмреБрд░рд╛, рдореИрдВ exemples/jsm рдореЗрдВ рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рдерд╛, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ exemples/js рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ "рдирд┐рд░реНрдорд┐рдд" рд╕рдВрд╕реНрдХрд░рдг рд╣реЛрдЧрд╛ ...

рдЬреЛ рдЖрдИрдИ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рддреЛрдбрд╝ рджреЗрдЧрд╛ ... рдЖрд╣ред

рдХреНрдпрд╛??? рдХреНрдпрд╛ рд╣рдо рдЕрднреА рднреА 2020 рдореЗрдВ рдЗрдВрдЯрд░рдиреЗрдЯ рдПрдХреНрд╕рдкреНрд▓реЛрд░рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдХреНрдпрд╛ рд╣рдо рдЗрд╕ 7 рд╡рд░реНрд╖реАрдп рдбрд╛рдпрдирд╛рд╕реЛрд░ рдкрд░ рд╡реЗрдмрдЬреАрдПрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рд╕рдВрдЧрддрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдЧрдВрднреАрд░рддрд╛ рд╕реЗ !! 1.4% ...
_(рдпрджрд┐ рдХреЛрдИ рддреАрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ IE рдХреЗ рддрд╣рдд рдЙрдкрдпреЛрдЧ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣рд╛ рд╣реИ, рддреЛ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ lib рдореЗрдВ рдПрдХ рд╕рд╛рдВрдЦреНрдпрд┐рдХреА рд╕рдВрдЧреНрд░рд╛рд╣рдХ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рд┐рдП)_

BTW, рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдмреЗрдмреЗрд▓ рдореМрдЬреВрдж рд╣реИ ...

рдмрд┐рд▓реНрдб рдлрд╝рд╛рдЗрд▓реЗрдВ three.js рдФрд░ three.min.js рдХреЗ рд╕рд╛рде-рд╕рд╛рде examples/js рдХреА рд╕рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрднреА рднреА IE 11 рдЬреИрд╕реЗ рдкреБрд░рд╛рдиреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓ рдПрдХ рдкреАрдЖрд░ рдерд╛ рдЬрд┐рд╕реЗ IE 11 (#18091) рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдмрдВрдж рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЕрднреА рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИрдВред рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╡рд░реНрддрдорд╛рди рдиреАрддрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рдлрд╛рдЗрд▓реЗрдВ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИ рддрд╛рдХрд┐ рд╡реЗ ES6 рд╕реЗ ES5 рд░реВрдкрд╛рдВрддрд░рдг рд╕реНрд╡рдпрдВ рди рдХрд░реЗрдВред #20455 рдореЗрдВ рднреА рдЗрд╕ рдкрд░ рдЪрд░реНрдЪрд╛ рд╣реБрдИ рдереАред

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╡рд░реНрддрдорд╛рди рдиреАрддрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рдлрд╛рдЗрд▓реЗрдВ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИ рддрд╛рдХрд┐ рд╡реЗ ES6 рд╕реЗ ES5 рд░реВрдкрд╛рдВрддрд░рдг рд╕реНрд╡рдпрдВ рди рдХрд░реЗрдВред

рдареАрдХ рд╣реИ, рдЙрд╕ рдиреАрддрд┐ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ рдЕрдЧрд░ рд╕реНрд░реЛрдд рдХреЛ рдЖрдзреБрдирд┐рдХ рддрд░реАрдХреЗ рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдпрджрд┐ рдкрд░рд┐рдгрд╛рдореА рдирд┐рд░реНрдорд╛рдг рдХреЛ рдкрдардиреАрдп рдирд╣реАрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ ...
рдХреНрдпреЛрдВрдХрд┐ рдЯреНрд░рд╛рдВрд╕рдкрд┐рд▓рд░ рдРрд╕реЗ рдмрджрд╕реВрд░рдд рдХреЛрдб рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИ!
рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ ESnext рдореЗрдВ рд▓рд┐рдЦреЗ рдЬрд╛ рд░рд╣реЗ src рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣реА рд╣реИ, рдФрд░ рдмрджрд╕реВрд░рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ exemples/js рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛ рд╣реИ рдпрджрд┐ рдпрд╣ рдлрд╝рд╛рдЗрд▓реЗрдВ рдкрдардиреАрдп, рдЯрд┐рдкреНрдкрдгреА рдФрд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдмрдирд╛рдИ рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП ...

рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВ рдореИрдВ рдЦреБрдж рд╕реЗ рдХрдИ рдмрд╛рд░ рдкреВрдЫ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рдЙрджрд╛рд╣рд░рдг рдХреНрдпреЛрдВ рд╣реИрдВ рдФрд░ рдореБрдЦреНрдп рдореБрдЦреНрдп рд╕реНрд░реЛрдд рдирд╣реАрдВ рд╣реИрдВ!
рдЙрджрд╛рд╣рд░рдг: рдирд┐рдпрдВрддреНрд░рдг рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд╡реИрдХрд▓реНрдкрд┐рдХ рдРрдбрдСрди рдХреА рддрд░рд╣ рдХреЙрдкреА рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдкрдврд╝рддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рдгрд╛ рд▓реЗрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдШреВрд░реНрдгрди рдХреНрдпреВрдм рдЙрджрд╛рд╣рд░рдг ...

_(рдореИрдВрдиреЗ рдЕрдкрдиреА рдпрд╛рддреНрд░рд╛ рдереНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ рдЦреЛрдЬ рд╕реЗ рд╢реБрд░реВ рдХреА: "рд╡реЗрдмрдЧреНрд▓ рд░реЛрдЯреЗрдЯрд┐рдВрдЧ рдХреНрдпреВрдм" рдФрд░ рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг 1 рдирд╛рдЗрдЯ рдХреЛрдб рдореИрд░рд╛рдерди рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рдЧреЗрдо рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдХреНрдпреВрдм рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ ^^)_

рдЙрдЪрд┐рдд рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдХреЛрд░ рдореЗрдВ рдХреМрди рд╕реА рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХреНрдпрд╛ рд╣реИрдВред рдЬрдм рддрдХ рдкреЗрдбрд╝ рд╣рд┐рд▓рдирд╛ рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддрдм рддрдХ рдЖрдкрдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдХреЗрд╡рд▓ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣реЛрддреА рд╣реИрдВ рдЬрд┐рдирдХреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдореЗрд░реЗ рд▓рд┐рдП, рдХреЛрд░ рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рднреЗрдж рдЙрд╕ рд╕рдордп рд╕реЗ рдЖрддрд╛ рд╣реИ рдЬрдм рдЗрд╕ рддрд░рд╣ рдХрд╛ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдЕрднреА рддрдХ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рдерд╛ред рдХреЛрд░ рдЫреЛрдЯрд╛ рдФрд░ рдХреЙрдореНрдкреИрдХреНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдХ рдШрдЯрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдпрд╛рдд рдХрд░рдирд╛ рдерд╛ред рдХреЗрд╡рд▓ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ _рдорд╣рддреНрд╡рдкреВрд░реНрдг_ рдлрд╝рд╛рдЗрд▓реЗрдВ рд╢рд╛рдорд┐рд▓ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рдХреЛрд░ рдореЗрдВ рдХреМрди рд╕реА рдлрд╛рдЗрд▓реЗрдВ рд╕рдорд╛рдкреНрдд рд╣реБрдИрдВ, рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдорд╛рдорд▓рд╛-рджрд░-рдорд╛рдорд▓рд╛ рдирд┐рд░реНрдгрдп рдерд╛ред

рдЙрдЪрд┐рдд рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдХреЛрд░ рдореЗрдВ рдХреМрди рд╕реА рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХреНрдпрд╛ рд╣реИрдВред рдЬрдм рддрдХ рдкреЗрдбрд╝ рд╣рд┐рд▓рдирд╛ рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддрдм рддрдХ рдЖрдкрдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рдХреЗрд╡рд▓ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣реЛрддреА рд╣реИрдВ рдЬрд┐рдирдХреА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рдпрд╣ рдХреЗрд╡рд▓ ES рдореЙрдбреНрдпреВрд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реИ;)

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

boyravikumar picture boyravikumar  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ghost picture ghost  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

donmccurdy picture donmccurdy  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

akshaysrin picture akshaysrin  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

alexprut picture alexprut  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ