Skip to content

Commit a8cceae

Browse files
[메서드와 'this'] 과제 보완
1 parent 1b729bc commit a8cceae

File tree

9 files changed

+29
-29
lines changed

9 files changed

+29
-29
lines changed

1-js/04-object-basics/04-object-methods/2-check-syntax/solution.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@ let user = {
1515

1616
**에러는 `user = {...}`뒤에 세미콜론이 없어서 발생했습니다.**
1717

18-
자바스크립트는 괄호(`(us...` ) 앞엔 세미콜론을 자동으로 넣어주지 않습니다. 따라서 코드는 아래와 같아집니다.
18+
자바스크립트는 괄호(`(us...` ) 앞에 세미콜론을 자동으로 넣어주지 않습니다. 따라서 코드는 아래와 같아집니다.
1919

2020
```js no-beautify
2121
let user = { go:... }(user.go)()
2222
```
2323

24-
이렇게 두 표현식이 합쳐지면서 인수가 `(user.go)`인 객체 형태의 함수를 호출한 것처럼 보입니다. 게다가 객체 `user`가 정의되지 않은 상태에서 같은 줄에 `let user`를 사용했기 때문에 에러가 발생합니다.
24+
이렇게 두 표현식이 합쳐지면서 인수가 `(user.go)`인 객체 형태의 함수를 호출한 것처럼 되었습니다. 여기에 더하여 객체 `user`가 정의되지 않은 상태에서 같은 줄에 `let user`를 사용했기 때문에 에러가 발생합니다.
2525

2626
`user = {...}`뒤에 세미콜론을 붙여서 에러를 해결해봅시다.
2727

@@ -34,4 +34,4 @@ let user = {
3434
(user.go)() // John
3535
```
3636

37-
참고로, `(user.go)` 에서 주위를 감싸고 있는 괄호는 아무런 역할을 하지 않습니다. 괄호는 대게 연산자 우선순위를 바꾸는 데 사용되는데, `(user.go)`에선 점 `.` 연산자가 먼저 동작하기 때문에 의미가 없습니다. 문제 출제 의도는 세미콜론 여부였습니다.
37+
참고로, `(user.go)`를 감싸는 괄호는 아무런 역할을 하지 않습니다. 괄호는 대게 연산자 우선순위를 바꾸는 데 사용되는데, `(user.go)`에선 점 `.` 연산자가 먼저 동작하기 때문에 의미가 없습니다. 문제 출제 의도는 세미콜론 여부였습니다.

1-js/04-object-basics/04-object-methods/3-why-this/solution.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
2. 역시 일반적인 호출 방법에 속합니다. 괄호가 추가되었긴 하지만 연산 우선순위를 바꾸진 않으므로 점 연산자가 먼저 실행됩니다.
77

8-
3. 좀 더 복잡한 패턴의 호출(`(expression).method()`)이 등장했네요. 세 번째 호출은 아래와 같은 코드 두 줄로 쪼갤 수 있습니다.
8+
3. 좀 더 복잡한 패턴의 호출(`(expression).method()`)이 등장했네요. 세 번째 호출은 아래와 같은 코드로 쪼갤 수 있습니다.
99

1010
```js no-beautify
1111
f = obj.go; // 표현식 계산하기
@@ -16,8 +16,8 @@
1616

1717
4. `(3)`과 동일한 패턴의 호출입니다. `expression``obj.go || obj.stop`라는 차이점만 있습니다.
1818

19-
`(3)``(4)`에서 어떤 일이 일어나는지 알려면 참조 타입을 다시 상기시키셔야 합니다.
19+
`(3)``(4)`에서 어떤 일이 일어나는지 알려면 참조 타입을 다시 상기해야 합니다.
2020
점이나 대괄호를 통해 프로퍼티에 접근하려는 경우 참조 타입 값(`(base, name, strict)`)이 반환됩니다.
2121

22-
메서드 호출을 제외하고, 참조 타입 값에 행해지는 모든 연산은 참조 타입 값을 일반적인 값으로 변환시킵니다. 이 과정에서 `this`대한 정보가 누락됩니다.
22+
메서드 호출을 제외하고, 참조 타입 값에 행해지는 모든 연산은 참조 타입 값을 일반 값으로 변환시킵니다. 이 과정에서 `this`에 정보가 누락됩니다.
2323

1-js/04-object-basics/04-object-methods/3-why-this/task.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ importance: 3
22

33
---
44

5-
# "this" 값 알아내기
5+
# 'this' 값 알아내기
66

77
아래 코드에선 다양한 방법으로 `user.go()`를 4번 연속 호출합니다.
88

1-js/04-object-basics/04-object-methods/4-object-property-this/solution.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
**Answer: an error.**
1+
**에러**가 발생합니다.
22

3-
Try it:
3+
직접 실행해 봅시다.
44
```js run
55
function makeUser() {
66
return {
@@ -14,26 +14,26 @@ let user = makeUser();
1414
alert( user.ref.name ); // Error: Cannot read property 'name' of undefined
1515
```
1616

17-
That's because rules that set `this` do not look at object definition. Only the moment of call matters.
17+
에러가 발생하는 이유는 `this` 값을 설정할 땐 객체 정의가 사용되지 않기 때문입니다. `this` 값은 호출 시점에 결정됩니다.
1818

19-
Here the value of `this` inside `makeUser()` is `undefined`, because it is called as a function, not as a method with "dot" syntax.
19+
위 코드에서 `makeUser()` `this``undefined`가 됩니다. 메서드로써 호출된 게 아니라 함수로써 호출되었기 때문입니다.
2020

21-
The value of `this` is one for the whole function, code blocks and object literals do not affect it.
21+
`this` 값은 전체 함수가 됩니다. 코드 블럭과 객체 리터럴은 여기에 영향을 주지 않습니다.
2222

23-
So `ref: this` actually takes current `this` of the function.
23+
따라서 `ref: this`는 함수의 현재 `this` 값을 가져옵니다.
2424

25-
We can rewrite the function and return the same `this` with `undefined` value:
25+
`this`의 값이 `undefined`가 되게 함수를 다시 작성하면 다음과 같습니다.
2626

2727
```js run
2828
function makeUser(){
29-
return this; // this time there's no object literal
29+
return this; // 이번엔 객체 리터럴을 사용하지 않았습니다.
3030
}
3131

3232
alert( makeUser().name ); // Error: Cannot read property 'name' of undefined
3333
```
34-
As you can see the result of `alert( makeUser().name )` is the same as the result of `alert( user.ref.name )` from the previous example.
34+
보시다시피 `alert( makeUser().name )`와 위쪽에서 살펴본 `alert( user.ref.name )`의 결과가 같은 것을 확인할 수 있습니다.
3535

36-
Here's the opposite case:
36+
에러가 발생하지 않게 하려면 코드를 다음과 같이 수정하면 됩니다.
3737

3838
```js run
3939
function makeUser() {
@@ -52,4 +52,4 @@ let user = makeUser();
5252
alert( user.ref().name ); // John
5353
```
5454

55-
Now it works, because `user.ref()` is a method. And the value of `this` is set to the object before dot `.`.
55+
이렇게 하면 `user.ref()`가 메서드가 되고 `this``.` 앞의 객체가 되기 때문에 에러가 발생하지 않습니다.

1-js/04-object-basics/04-object-methods/7-calculator/_js.view/solution.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ let calculator = {
88
},
99

1010
read() {
11-
this.a = +prompt('a?', 0);
12-
this.b = +prompt('b?', 0);
11+
this.a = +prompt('첫 번째 값:', 0);
12+
this.b = +prompt('두 번째 값:', 0);
1313
}
1414
};

1-js/04-object-basics/04-object-methods/7-calculator/solution.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ let calculator = {
1010
},
1111

1212
read() {
13-
this.a = +prompt('a?', 0);
14-
this.b = +prompt('b?', 0);
13+
this.a = +prompt('첫 번째 값:', 0);
14+
this.b = +prompt('두 번째 값:', 0);
1515
}
1616
};
1717

1-js/04-object-basics/04-object-methods/7-calculator/task.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ importance: 5
44

55
# 계산기 만들기
66

7-
아래 3가지 메서드를 가진 `calculator`라는 객체를 만들어보세요.
7+
`calculator`라는 객체를 만들고 세 메서드를 구현해 봅시다.
88

9-
- `read()` 프롬프트 창에서 두 값을 보여주고 객체의 프로퍼티로 저장합니다.
9+
- `read()`에선 프롬프트 창을 띄우고 더할 값 두 개를 입력받습니다. 입력받은 값은 객체의 프로퍼티에 저장합니다.
1010
- `sum()`은 저장된 두 값의 합을 반환합니다.
1111
- `mul()`은 저장된 두 값의 곱을 반환합니다.
1212

1-js/04-object-basics/04-object-methods/8-chain-calls/solution.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ let ladder = {
2626
ladder.up().up().down().up().down().showStep(); // 1
2727
```
2828

29-
메서드 호출 하나씩 한 줄에 작성할 수도 있습니다. 체이닝이 길어질 경우 이렇게 작성하면 가독성이 좋아집니다.
29+
체이닝이 길어질 땐 메서드 호출을 별도의 줄에 작성하면 가독성이 좋아집니다.
3030

3131
```js
3232
ladder

1-js/04-object-basics/04-object-methods/8-chain-calls/task.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ importance: 2
44

55
# 체이닝
66

7-
올라가기와 내려가기 메서드를 제공하는 객체 `ladder`있다고 합시다.
7+
올라가기(`up`)와 내려가기(`down`) 메서드를 제공하는 객체 `ladder`있습니다.
88

99
```js
1010
let ladder = {
@@ -21,7 +21,7 @@ let ladder = {
2121
};
2222
```
2323

24-
만일 메서드를 연이어 호출하고자 한다면 아래와 같이 코드를 작성할 수 있습니다.
24+
메서드를 연이어 호출하고자 한다면 아래와 같이 코드를 작성할 수 있습니다.
2525

2626
```js
2727
ladder.up();
@@ -30,10 +30,10 @@ ladder.down();
3030
ladder.showStep(); // 1
3131
```
3232

33-
아래와 같이 메서드 호출 체이닝이 가능하도록 `up`, `down`, `showStep`수정해보세요.
33+
`up`, `down`, `showStep`수정해 아래처럼 메서드 호출 체이닝이 가능하도록 해봅시다.
3434

3535
```js
3636
ladder.up().up().down().showStep(); // 1
3737
```
3838

39-
이러한 방식은 자바스크립트 라이브러리에서 널리 사용됩니다.
39+
참고로 이런 방식은 자바스크립트 라이브러리에서 널리 사용됩니다.

0 commit comments

Comments
 (0)