Skip to content

Commit 0c884db

Browse files
authored
Merge pull request #267 from ockley/master
Static properties and methods
2 parents 1ea53e6 + dab1d0b commit 0c884db

4 files changed

Lines changed: 183 additions & 93 deletions

File tree

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
First, let's see why the latter code doesn't work.
1+
Lad os først se på, hvorfor den sidste kode ikke virker.
22

3-
The reason becomes obvious if we try to run it. An inheriting class constructor must call `super()`. Otherwise `"this"` won't be "defined".
3+
Grunden til det bliver tydelig hvis vi prøver at køre den. En arvende klassekonstruktør skal kalde `super()`. Ellers vil `"this"` ikke være "defineret".
44

5-
So here's the fix:
5+
Så her er en måde at fixe det på:
66

77
```js run
88
class Rabbit extends Object {
99
constructor(name) {
1010
*!*
11-
super(); // need to call the parent constructor when inheriting
11+
super(); // du skal kalde den overordnede konstruktør når du nedarver
1212
*/!*
1313
this.name = name;
1414
}
@@ -19,16 +19,16 @@ let rabbit = new Rabbit("Rab");
1919
alert( rabbit.hasOwnProperty('name') ); // true
2020
```
2121

22-
But that's not all yet.
22+
Men det er ikke alt.
2323

24-
Even after the fix, there's still an important difference between `"class Rabbit extends Object"` and `class Rabbit`.
24+
Selv efter denne rettelse er der en vigtig forskel mellem `"class Rabbit extends Object"` og `class Rabbit`.
2525

26-
As we know, the "extends" syntax sets up two prototypes:
26+
Som vi ved, opretter "extends" syntaksen to prototyper:
2727

28-
1. Between `"prototype"` of the constructor functions (for methods).
29-
2. Between the constructor functions themselves (for static methods).
28+
1. Mellem `"prototype"` af constructor funktionerne (for metoder).
29+
2. Mellem constructor funktionerne selv (for statiske metoder).
3030

31-
In the case of `class Rabbit extends Object` it means:
31+
I tilfældet med `class Rabbit extends Object` betyder det, at `Rabbit` nedarver både de statiske og de normale metoder fra `Object`.:
3232

3333
```js run
3434
class Rabbit extends Object {}
@@ -37,45 +37,45 @@ alert( Rabbit.prototype.__proto__ === Object.prototype ); // (1) true
3737
alert( Rabbit.__proto__ === Object ); // (2) true
3838
```
3939

40-
So `Rabbit` now provides access to the static methods of `Object` via `Rabbit`, like this:
40+
`Rabbit` giver nu adgang til de statiske metoder fra `Object` via `Rabbit`, som dette:
4141

4242
```js run
4343
class Rabbit extends Object {}
4444

4545
*!*
46-
// normally we call Object.getOwnPropertyNames
46+
// normalt kalder vi Object.getOwnPropertyNames
4747
alert ( Rabbit.getOwnPropertyNames({a: 1, b: 2})); // a,b
4848
*/!*
4949
```
5050

51-
But if we don't have `extends Object`, then `Rabbit.__proto__` is not set to `Object`.
51+
Men, hvis vi ikke har `extends Object` så bliver `Rabbit.__proto__` ikke sat til `Object`.
5252

53-
Here's the demo:
53+
Her er en demonstration af dette:
5454

5555
```js run
5656
class Rabbit {}
5757

5858
alert( Rabbit.prototype.__proto__ === Object.prototype ); // (1) true
5959
alert( Rabbit.__proto__ === Object ); // (2) false (!)
60-
alert( Rabbit.__proto__ === Function.prototype ); // as any function by default
60+
alert( Rabbit.__proto__ === Function.prototype ); // som enhver funktion som standard
6161

6262
*!*
63-
// error, no such function in Rabbit
64-
alert ( Rabbit.getOwnPropertyNames({a: 1, b: 2})); // Error
63+
// fejl, sådan en funktion findes ikke i Rabbit
64+
alert ( Rabbit.getOwnPropertyNames({a: 1, b: 2})); // Fejl
6565
*/!*
6666
```
6767

68-
So `Rabbit` doesn't provide access to static methods of `Object` in that case.
68+
`Rabbit` giver ikke adgang til de statiske metoder fra `Object` i det tilfælde.
6969

70-
By the way, `Function.prototype` also has "generic" function methods, like `call`, `bind` etc. They are ultimately available in both cases, because for the built-in `Object` constructor, `Object.__proto__ === Function.prototype`.
70+
Forresten så har`Function.prototype` også en "generiske" function metoder, såsom `call`, `bind` osv. De er i sidste ende tilgængelige i begge tilfælde, fordi for den indbyggede `Object` constructor, `Object.__proto__ === Function.prototype`.
7171

72-
Here's the picture:
72+
Her er en oversigt over forskellene:
7373

7474
![](rabbit-extends-object.svg)
7575

76-
So, to put it short, there are two differences:
76+
Så, kort fortalt er der to forskelle:
7777

7878
| class Rabbit | class Rabbit extends Object |
7979
|--------------|------------------------------|
80-
| -- | needs to call `super()` in constructor |
80+
| -- | skal kalde `super()` i constructor |
8181
| `Rabbit.__proto__ === Function.prototype` | `Rabbit.__proto__ === Object` |

1-js/09-classes/03-static-properties-methods/3-class-extend-object/task.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@ importance: 3
22

33
---
44

5-
# Class extends Object?
5+
# Klasse udvider object?
66

7-
As we know, all objects normally inherit from `Object.prototype` and get access to "generic" object methods like `hasOwnProperty` etc.
7+
Som vi ved, nedarver alle objekter normalt fra `Object.prototype` og får dermed adgang til "generiske" objektmetoder som `hasOwnProperty` etc.
88

9-
For instance:
9+
For eksempel:
1010

1111
```js run
1212
class Rabbit {
@@ -18,16 +18,16 @@ class Rabbit {
1818
let rabbit = new Rabbit("Rab");
1919

2020
*!*
21-
// hasOwnProperty method is from Object.prototype
21+
// hasOwnProperty metoden kommer fra Object.prototype
2222
alert( rabbit.hasOwnProperty('name') ); // true
2323
*/!*
2424
```
2525

26-
But if we spell it out explicitly like `"class Rabbit extends Object"`, then the result would be different from a simple `"class Rabbit"`?
26+
Men, hvis vi skriver det udtrykkeligt som `"class Rabbit extends Object"`, så vil resultatet være anderledes end ved en simpel `"class Rabbit"`?
2727

28-
What's the difference?
28+
Hvad er forskellen?
2929

30-
Here's an example of such code (it doesn't work -- why? fix it?):
30+
Her er et eksempel på sådan en kode (den virker ikke -- hvorfor? fix den?):
3131

3232
```js
3333
class Rabbit extends Object {
@@ -38,5 +38,5 @@ class Rabbit extends Object {
3838

3939
let rabbit = new Rabbit("Rab");
4040

41-
alert( rabbit.hasOwnProperty('name') ); // Error
41+
alert( rabbit.hasOwnProperty('name') ); // Fejl
4242
```
Lines changed: 91 additions & 1 deletion
Loading

0 commit comments

Comments
 (0)