Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,31 +1,31 @@

The method can take all enumerable keys using `Object.keys` and output their list.
Metoden kan tage alle enumerable (tælbare) nøgler ved hjælp af `Object.keys` og outputte deres liste.

To make `toString` non-enumerable, let's define it using a property descriptor. The syntax of `Object.create` allows us to provide an object with property descriptors as the second argument.
For at gøre `toString` non-enumerable, lad os definere den ved hjælp af en egenskabsbeskrivelse. Syntaksen for `Object.create` giver os mulighed for at give et objekt med egenskabsbeskrivelser som anden argument.

```js run
*!*
let dictionary = Object.create(null, {
toString: { // define toString property
value() { // the value is a function
toString: { // definer egenskaben toString
value() { // value er en funktion
return Object.keys(this).join();
}
}
});
*/!*

dictionary.apple = "Apple";
dictionary.apple = "Æble";
dictionary.__proto__ = "test";

// apple and __proto__ is in the loop
// Kun apple og __proto__ er i loopet
for(let key in dictionary) {
alert(key); // "apple", then "__proto__"
alert(key); // "apple" og "__proto__"
}

// comma-separated list of properties by toString
// kommasepareret liste af egenskaber fra toString
alert(dictionary); // "apple,__proto__"
```

When we create a property using a descriptor, its flags are `false` by default. So in the code above, `dictionary.toString` is non-enumerable.
Når vi opretter en egenskab ved hjælp af en egenskabsbeskrivelser, er dens flag som standard sat til `false`. Så i koden ovenfor er `dictionary.toString` non-enumerable.

See the chapter [](info:property-descriptors) for review.
Se kapitlet [](info:property-descriptors) for en gennemgang.
Original file line number Diff line number Diff line change
Expand Up @@ -2,30 +2,30 @@ importance: 5

---

# Add toString to the dictionary
# Tilføj toString til ordbogen

There's an object `dictionary`, created as `Object.create(null)`, to store any `key/value` pairs.
Der er et objekt `dictionary`, oprettet som `Object.create(null)`, til at gemme enhver `key/value` par.

Add method `dictionary.toString()` into it, that should return a comma-delimited list of keys. Your `toString` should not show up in `for..in` over the object.
Tilføj metoden `dictionary.toString()` til det, som skal returnere en komma-separeret liste af nøgler. Din `toString` bør ikke vises i `for..in` over objektet.

Here's how it should work:
Den bør virke sådan her:

```js
let dictionary = Object.create(null);

*!*
// your code to add dictionary.toString method
// din kode til at tilføje dictionary.toString metoden
*/!*

// add some data
dictionary.apple = "Apple";
// tilføj nogle data
dictionary.apple = "æble";
dictionary.__proto__ = "test"; // __proto__ is a regular property key here

// only apple and __proto__ are in the loop
// Kun apple og __proto__ er i loopet
for(let key in dictionary) {
alert(key); // "apple", then "__proto__"
alert(key); // "apple" og "__proto__"
}

// your toString in action
// din toString i aktion
alert(dictionary); // "apple,__proto__"
```
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

The first call has `this == rabbit`, the other ones have `this` equal to `Rabbit.prototype`, because it's actually the object before the dot.
Det første kald har `this == rabbit`, de andre har `this` lig med `Rabbit.prototype`, fordi det faktisk er objektet før punktummet.

So only the first call shows `Rabbit`, other ones show `undefined`:
Så kun det første kald viser `Rabbit`, andre viser `undefined`:

```js run
function Rabbit(name) {
Expand All @@ -11,9 +11,9 @@ Rabbit.prototype.sayHi = function() {
alert( this.name );
}

let rabbit = new Rabbit("Rabbit");
let rabbit = new Rabbit("Kanin");

rabbit.sayHi(); // Rabbit
rabbit.sayHi(); // Kanin
Rabbit.prototype.sayHi(); // undefined
Object.getPrototypeOf(rabbit).sayHi(); // undefined
rabbit.__proto__.sayHi(); // undefined
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ importance: 5

---

# The difference between calls
# Forskellen mellem kald

Let's create a new `rabbit` object:
Lad os oprette et nyt `rabbit` objekt:

```js
function Rabbit(name) {
Expand All @@ -14,10 +14,10 @@ Rabbit.prototype.sayHi = function() {
alert(this.name);
};

let rabbit = new Rabbit("Rabbit");
let rabbit = new Rabbit("Kanin");
```

These calls do the same thing or not?
Gør disse kald det samme eller gør de ikke?

```js
rabbit.sayHi();
Expand Down
Loading