LEARNING JAVASCRIPT - Trang 217

In this case, we aren’t so much aliasing

Dollar

as shortening it from

Money.Dollar

to

simply

Dollar

, which seems a reasonable enough thing to do.

Now that we’ve done the mental equivalent of stretching before exercising, let’s move

on to more vigorous abstract thinking.

Functions in an Array

This is a pattern that hasn’t been used very much historically, but its usage is increas‐

ing, and it is extremely useful in certain circumstances. One application is the idea of

a pipeline—that is, a set of individual steps we want to do frequently. The advantage of

using arrays is that you can modify an array at any time. Need to take a step out? Just

remove it from the array. Need to add a step? Just append something to the array.
One example is graphics transformations. If you’re building some kind of visualiza‐

tion software, there is often a “pipeline” of transformations that you apply to many

points. The following shows an example of common 2D transforms:

const

sin

=

Math

.

sin

;

const

cos

=

Math

.

cos

;

const

theta

=

Math

.

PI

/

4

;

const

zoom

=

2

;

const

offset

=

[

1

,

-

3

];

const

pipeline

=

[

function

rotate

(

p

) {

return

{

x

:

p

.

x

*

cos

(

theta

)

-

p

.

y

*

sin

(

theta

),

y

:

p

.

x

*

sin

(

theta

)

+

p

.

y

*

cos

(

theta

),

};
},

function

scale

(

p

) {

return

{

x

:

p

.

x

*

zoom

,

y

:

p

.

y

*

zoom

};

},

function

translate

(

p

) {

return

{

x

:

p

.

x

+

offset

[

0

],

y

:

p

.

y

+

offset

[

1

]; };

},
];

// pipeline is now an array of functions for a specific 2D transform
// we can now transform a point:

const

p

=

{

x

:

1

,

y

:

1

};

let

p2

=

p

;

for

(

let

i

=

0

;

i

<

pipeline

.

length

;

i

++

) {

p2

=

pipeline

[

i

](

p2

);

}

// p2 is now p1 rotated 45 degrees (pi/4 radians) around the origin,

Function Variables | 193

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.