Skip to content

Commit 7697f95

Browse files
committed
fixes
1 parent eeee9fe commit 7697f95

File tree

4 files changed

+41
-38
lines changed

4 files changed

+41
-38
lines changed

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

+2-8
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@ The error message in most browsers does not give understanding what went wrong.
1515

1616
**The error appears because a semicolon is missing after `user = {...}`.**
1717

18-
JavaScript does not assume a semicolon before a bracket `(user.go)()`, so it reads the code like:
18+
JavaScript does not auto-insert a semicolon before a bracket `(user.go)()`, so it reads the code like:
1919

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

24-
Then we can also see that such a joint expression is syntactically a call of the object `{ go: ... }` as a function with the argument `(user.go)`. And that also happens on the same line with `let user`, so the `user` object has not yet even been defined, hence the error.
24+
Then we can also see that such a joint expression is syntactically a call of the object `{ go: ... }` as a function with the argument `(user.go)`. And that also happens on the same line with `let user`, so the `user` object has not yet even been defined, hence the error.
2525

2626
If we insert the semicolon, all is fine:
2727

@@ -35,9 +35,3 @@ let user = {
3535
```
3636

3737
Please note that brackets around `(user.go)` do nothing here. Usually they setup the order of operations, but here the dot `.` works first anyway, so there's no effect. Only the semicolon thing matters.
38-
39-
40-
41-
42-
43-

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

+3-5
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@ 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 literals.
17+
That's because rules that set `this` do not look at object definition. Only the moment of call matters.
1818

19-
Here the value of `this` inside `makeUser()` is `undefined`, because it is called as a function, not as a method.
19+
Here the value of `this` inside `makeUser()` is `undefined`, because it is called as a function, not as a method with "dot" syntax.
2020

21-
And the object literal itself has no effect on `this`. The value of `this` is one for the whole function, code blocks and object literals do not affect it.
21+
The value of `this` is one for the whole function, code blocks and object literals do not affect it.
2222

2323
So `ref: this` actually takes current `this` of the function.
2424

@@ -42,5 +42,3 @@ alert( user.ref().name ); // John
4242
```
4343

4444
Now it works, because `user.ref()` is a method. And the value of `this` is set to the object before dot `.`.
45-
46-

1-js/04-object-basics/04-object-methods/article.md

+6-4
Original file line numberDiff line numberDiff line change
@@ -257,11 +257,11 @@ user.hi(); // John (the simple call works)
257257
*/!*
258258
```
259259
260-
On the last line there is a ternary operator that chooses either `user.hi` or `user.bye`. In this case the result is `user.hi`.
260+
On the last line there is a conditinal operator that chooses either `user.hi` or `user.bye`. In this case the result is `user.hi`.
261261
262-
The method is immediately called with parentheses `()`. But it doesn't work right!
262+
Then the method is immediately called with parentheses `()`. But it doesn't work right!
263263
264-
You can see that the call results in an error, because the value of `"this"` inside the call becomes `undefined`.
264+
As you can see, the call results in an error, because the value of `"this"` inside the call becomes `undefined`.
265265
266266
This works (object dot method):
267267
```js
@@ -306,7 +306,7 @@ The Reference Type is a "specification type". We can't explicitly use it, but it
306306
The value of Reference Type is a three-value combination `(base, name, strict)`, where:
307307
308308
- `base` is the object.
309-
- `name` is the property.
309+
- `name` is the property name.
310310
- `strict` is true if `use strict` is in effect.
311311
312312
The result of a property access `user.hi` is not a function, but a value of Reference Type. For `user.hi` in strict mode it is:
@@ -318,6 +318,8 @@ The result of a property access `user.hi` is not a function, but a value of Refe
318318
319319
When parentheses `()` are called on the Reference Type, they receive the full information about the object and its method, and can set the right `this` (`=user` in this case).
320320
321+
Reference type is a special "intermediary" internal type, with the purpose to pass information from dot `.` to calling parentheses `()`.
322+
321323
Any other operation like assignment `hi = user.hi` discards the reference type as a whole, takes the value of `user.hi` (a function) and passes it on. So any further operation "loses" `this`.
322324
323325
So, as the result, the value of `this` is only passed the right way if the function is called directly using a dot `obj.method()` or square brackets `obj['method']()` syntax (they do the same here). Later in this tutorial, we will learn various ways to solve this problem such as [func.bind()](/bind#solution-2-bind).

5-network/06-url/article.md

+30-21
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
The built-in [URL](https://url.spec.whatwg.org/#api) class provides a convenient interface for creating and parsing URLs.
55

6-
We don't have to use it at all. There are no networking methods that require exactly an `URL` object, strings are good enough. But sometimes it can be really helpful.
6+
There are no networking methods that require exactly an `URL` object, strings are good enough. So technically we don't have to use `URL`. But sometimes it can be really helpful.
77

88
## Creating an URL
99

@@ -13,8 +13,28 @@ The syntax to create a new URL object:
1313
new URL(url, [base])
1414
```
1515

16-
- **`url`** -- the text url
17-
- **`base`** -- an optional base for the `url`
16+
- **`url`** -- the URL string or path (if base is set, see below).
17+
- **`base`** -- an optional base, if set and `url` has only path, then the URL is generated relative to `base`.
18+
19+
For example, these two URLs are same:
20+
21+
```js run
22+
let url1 = new URL('https://javascript.info/profile/admin');
23+
let url2 = new URL('/profile/admin', 'https://javascript.info');
24+
25+
alert(url1); // https://javascript.info/profile/admin
26+
alert(url2); // https://javascript.info/profile/admin
27+
```
28+
29+
Переход к пути относительно текущего URL:
30+
31+
```js run
32+
let url = new URL('https://javascript.info/profile/admin');
33+
let testerUrl = new URL('tester', url);
34+
35+
alert(testerUrl); // https://javascript.info/profile/tester
36+
```
37+
1838

1939
The `URL` object immediately allows us to access its components, so it's a nice way to parse the url, e.g.:
2040

@@ -32,37 +52,26 @@ Here's the cheatsheet:
3252

3353
- `href` is the full url, same as `url.toString()`
3454
- `protocol` ends with the colon character `:`
35-
- `search` starts with the question mark `?`
55+
- `search` - a string of parameters, starts with the question mark `?`
3656
- `hash` starts with the hash character `#`
3757
- there are also `user` and `password` properties if HTTP authentication is present.
3858

39-
We can also use `URL` to create relative urls, using the second argument:
40-
41-
```js run
42-
let url = new URL('profile/admin', 'https://javascript.info');
43-
44-
alert(url); // https://javascript.info/profile/admin
45-
46-
url = new URL('tester', url); // go to 'tester' relative to current url path
47-
48-
alert(url); // https://javascript.info/profile/tester
49-
```
5059

5160
```smart header="We can use `URL` everywhere instead of a string"
5261
We can use an `URL` object in `fetch` or `XMLHttpRequest`, almost everywhere where a string url is expected.
5362

5463
In the vast majority of methods it's automatically converted to a string.
5564
```
5665
57-
## SearchParams
66+
## SearchParams "?..."
5867
59-
Let's say we want to create an url with given search params, for instance, `https://google.com/search?query=value`.
68+
Let's say we want to create an url with given search params, for instance, `https://google.com/search?query=JavaScript`.
6069
61-
They must be correctly encoded.
70+
They must be correctly encoded to include non-latin charcters, spaces etc.
6271
63-
In very old browsers, before `URL` appeared, we'd use built-in functions `encodeURIComponent/decodeURIComponent`.
72+
Some time ago, before `URL` objects appeared, we'd use built-in functions `encodeURIComponent/decodeURIComponent`. They have some problems, but now that doesn't matter.
6473
65-
Now, there's no need: `url.searchParams` is an object of type [URLSearchParams](https://url.spec.whatwg.org/#urlsearchparams).
74+
There's URL property for that: `url.searchParams` is an object of type [URLSearchParams](https://url.spec.whatwg.org/#urlsearchparams).
6675
6776
It provides convenient methods for search parameters:
6877
@@ -81,7 +90,7 @@ For example:
8190
8291
```js run
8392
let url = new URL('https://google.com/search');
84-
url.searchParams.set('query', 'test me!');
93+
url.searchParams.set('query', 'test me!'); // added parameter with a space and !
8594
8695
alert(url); // https://google.com/search?query=test+me%21
8796

0 commit comments

Comments
 (0)