-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathsida3.html
More file actions
36 lines (36 loc) · 2.96 KB
/
sida3.html
File metadata and controls
36 lines (36 loc) · 2.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>JavaScript Crash Course</title>
<link rel="stylesheet" href="google-code-prettify/prettify.css">
<link rel="stylesheet" href="css/sons-of-obsidian.css">
<link rel="stylesheet" href="css/style.css" type="text/css">
<script src="google-code-prettify/prettify.js"></script>
<script src="js/qunit-1.15.0.js"></script>
<script src="exercises/sida3.js"></script>
<script src="tests/sida3.js"></script>
</head>
<body onload="prettyPrint()">
<div class='column'>
<div class="content">
<div class="button left"><a href="sida2.html"><<PREV</a></div>
<div class="button right"><a href="sida4.html">NEXT >></a></div>
<h1>Prototype chain</h1>
<p>Alla objekt i JavaScript har en (gömd!) property som brukar kallas [[prototype]], vilken bestäms i samband med att objektet skapas. Denna referens hänvisar till ett annat object, eller till null.</p>
<p>När man försöker läsa en property från ett object, och just det objektet saknar den propertyn, så kommer JavaScript att kolla objektets [[prototype]] efter den efterfrågade propertyn, och om den inte finns där heller så fortsätter man att rekursivt kolla [[prototypens]] [[prototyp]] tills man nått en [[prototype]] som är null. Om man når null utan att något av objekten i kedjan har en property vid det namn man frågar efter så kommer man att returnera värdet undefined.</p>
<p>Denna kedja av [[prototype]]r brukar helt enkelt kallas för "Prototype chain".</p>
<p>Märk väl att den [[prototype]] som vi talar om alltså INTE är samma sak som eventuell property med namnet "prototype", [[prototype]] är alltså gömd för användaren, och kedjan kan inte ändras i efterhand genom att sätta en property vid namn prototype på objektet i fråga. Gömda properties som t.ex. [[prototype]] brukar skrivas inom dubbla klamrar, just för att vara tydlig med att man INTE menar en vanlig property vid namn "prototype" (Eller vad för gömd property man nu för tillfället pratar om).</p>
<p>Hur bestämmer man vad för property man vill tilldela sitt nyskapade Object då? Ja, det är här som Object.create kommer in i bilden, den null vi skickade in i Object.create i förra sliden var helt enkelt vilket objekt som ska användas som [[prototype]]. Vi satte det till null, vilket innebär att det objekt vi skapade inte har någon [[prototype]], och kommer alltså bara att ha de properties som man själv tilldelar det.</p>
<div class='testcaption'>Skapa ett objekt med ett annat objekt som [[prototype]]:</div>
<pre class="prettyprint linenums">var foo = {};
foo.name = 'Kalle';
var bar = Object.create(foo); // bars [[prototype]] refererar nu till foo
// foo.name === 'Kalle'</pre>
<div class='testcaption'>Test results:</div>
<div class='testresult' id="qunit"></div>
<div id="qunit-fixture"></div>
</div>
</div>
</body>
</html>