Detta verk är framtaget av Mats Loock i anslutning till kursen Grundläggande programmering (1DV021) vid Linnéuniversitetet.
Allt innehåll i detta verk förutom fotografier, ikoner, bild på kurslitteraturen samt Linnéuniversitetets logotyp och symbol,
är licensierad under en
Creative Commons Erkännande 4.0 Internationell Licens
.
Om du förändrar innehållet så ta inte med fotografier, ikoner, bild på kurslitteraturen samt Linnéuniversitetets logotyp och symbol i din nya version!
Vid all användning måste du ange källan: ”Linnéuniversitetet – Grundläggande programmering (1DV021)” och en länk till https://coursepress.lnu.se/kurs/grundlaggande-programmering och till Creative Common-licensen här ovan.
let valueconst getNumber = function () { return Math.floor(Math.random() * 6) + 1}value = getNumber()console.log(value) // OUTPUT: 4
const die = { faceValue: undefined, roll: function () { this.faceValue = Math.floor(Math.random() * 6) + 1 }}die.roll()console.log(die.faceValue) // OUTPUT: 4
faceValue
).roll
), vilket ändrar tärningens värde.const roll = function () { this.faceValue = Math.floor(Math.random() * 6) + 1}const die = { faceValue: undefined}const die2 = { faceValue: undefined, roll}roll.call(die) // i roll() kommer this att referera till samma objekt som diedie2.roll() // i roll() kommer this att referera till samma objekt som die2console.log(die.faceValue) // OUTPUT: 4console.log(die2.faceValue) // OUTPUT: 2
this
refererar till objektet som funktionen anropades för.this
// Skapar objekt som anropar funktion som använder this.const smallTalk = function (greet = 'Hej!') { console.log(greet + ' Jag, ' + this.name + ', är ' + this.age + ' år.')}const simplePerson = { name: 'Nisse', age: 42, talk: smallTalk}simplePerson.talk() // OUTPUT: Hej! Jag, Nisse, är 42 år.const anotherSimplePerson = { name: 'Ellen', age: 7}smallTalk.apply(anotherSimplePerson, ['Tjabba!']) // OUTPUT: Tjabba! Jag, Ellen, är 7 år.smallTalk.call(anotherSimplePerson, 'Hallå!') // OUTPUT: Hallå! Jag, Ellen, är 7 år.
Function.apply()
kräver att andra parametern är en array. Syntax: func.apply(thisArg, [argsArray])
Function.call()
anropas med kommaseparerade argument. Syntax: function.call(thisArg, arg1, arg2, ...)
createDie
löser problemet med att skapa flera liknande objekt, MEN...Object
! Inte Die
!const createDie = function () { const obj = { faceValue: undefined, roll: function () { this.faceValue = Math.floor(Math.random() * 6) + 1 } } return obj}const die = createDie()die.roll()console.log(die.faceValue) // OUTPUT: 3console.log(typeof die) // OUTPUT: objectconsole.log(die.constructor) // OUTPUT: [Function: Object]console.log(Object.getOwnPropertyNames(die)) // OUTPUT: [ 'faceValue', 'roll' ]
new
före en funktion som anropas betraktas funktionen som en konstruktorfunktion.new
sägs vara en instans av dess konstruktor.function Die () { this.faceValue = undefined this.roll = function () { this.faceValue = Math.floor(Math.random() * 6) + 1 }}const die = new Die() // die refererar till en instans av Diedie.roll()console.log(die.faceValue) // OUTPUT: 4console.log(typeof die) // OUTPUT: objectconsole.log(die.constructor) // OUTPUT: [Function: Die]console.log(Object.getOwnPropertyNames(die)) // OUTPUT: [ 'faceValue', 'roll' ]
function SimplePerson (name, age) { this.name = name this.age = age this.talk = function () { console.log('Jag, ' + this.name + ', är ' + this.age + ' år.') }}const simplePerson1 = new SimplePerson('Nisse', 42)const simplePerson2 = new SimplePerson('Ellen', 7)simplePerson1.talk() // OUTPUT: Jag, Nisse, är 42 år.simplePerson2.talk() // OUTPUT: Jag, Ellen, är 7 år.console.log(Object.getOwnPropertyNames(simplePerson1)) // OUTPUT: [ 'name', 'age', 'talk' ]
name
och age
har.talk
är en del av varje instans av SimplePerson
; det finns alltså två exakt lika upplagor av metoden.function Die () { this.faceValue = undefined}Die.prototype.roll = function () { this.faceValue = Math.floor(Math.random() * 6) + 1}const die = new Die()die.roll()console.log(die.faceValue) // OUTPUT: 4console.log(typeof die) // OUTPUT: objectconsole.log(die.constructor) // OUTPUT: [Function: Die]console.log(Object.getOwnPropertyNames(die)) // OUTPUT: [ 'faceValue' ]console.log(Object.getOwnPropertyNames(Die.prototype)) // OUTPUT: [ 'constructor', 'roll' ]
faceValue
, som är unik för varje instans av Die
.roll
tillhör prototypen för Die
och är gemensam för alla objekt instansierade från Die
.function Person (name, age) { this.name = name this.age = age}Person.prototype.talk = function () { console.log('Jag, ' + this.name + ', är ' + this.age + ' år.')}const person1 = new Person('Nisse', 42)console.log(person1.constructor) // [Function: Person]const person2 = new Person('Ellen', 7)console.log(person2.constructor) // [Function: Person]person1.talk() // Jag, Nisse, är 42 år.person2.talk() // Jag, Ellen, är 7 år.
class Die { constructor () { this.faceValue = undefined } roll () { this.faceValue = Math.floor(Math.random() * 6) + 1 }}const die = new Die()die.roll()console.log(die.faceValue) // OUTPUT: 4console.log(typeof die) // OUTPUT: objectconsole.log(die.constructor) // OUTPUT: [Function: Die]console.log(Object.getOwnPropertyNames(die)) // OUTPUT: [ 'faceValue' ]console.log(Object.getOwnPropertyNames(Die.prototype)) // OUTPUT: [ 'constructor', 'roll' ]
class Person { constructor (name, age) { this.name = name this.age = age } talk () { console.log('Jag, ' + this.name + ', är ' + this.age + ' år.') }}const person1 = new Person('Nisse', 42)console.log(person1.constructor) // OUTPUT: [Function: Person]const person2 = new Person('Ellen', 7)console.log(person2.constructor) // OUTPUT: [Function: Person]person1.talk() // OUTPUT: Jag, Nisse, är 42 år.person2.talk() // OUTPUT: Jag, Ellen, är 7 år.console.log(Object.getOwnPropertyNames(person1)) // OUTPUT: [ 'name', 'age' ]console.log(Object.getOwnPropertyNames(Person.prototype)) // OUTPUT: [ 'constructor', 'talk' ]
const dieBase = { roll: function () { this.faceValue = Math.floor(Math.random() * 6) + 1 }}const createDie = function () { return Object.create(dieBase, { 'faceValue': { value: undefined, writable: true, enumerable: true, configurable: true } })}const die = createDie()die.roll()console.log(die.faceValue) // OUTPUT: 4console.log(typeof die) // OUTPUT: objectconsole.log(die.constructor) // OUTPUT: [Function: Object]console.log(Object.getOwnPropertyNames(die)) // OUTPUT: [ 'faceValue' ]
faceValue
till objektet med funktionen roll
.const Person = { talk: function () { console.log('Jag, ' + this.name + ', är ' + this.age + ' år.') }}const createPerson = function (name, age) { return Object.create(Person, { 'name': { value: name, writable: true, enumerable: true, configurable: true }, 'age': { value: age, writable: true, enumerable: true, configurable: true } })}const person1 = createPerson('Nisse', 42)console.log(person1.constructor) // OUTPUT: [Function: Object]const person2 = createPerson('Ellen', 7)console.log(person2.constructor) // OUTPUT: [Function: Object]person1.talk() // OUTPUT: Jag, Nisse, är 42 år.person2.talk() // OUTPUT: Jag, Ellen, är 7 år.console.log(Object.getOwnPropertyNames(person1)) // OUTPUT: [ 'name', 'age' ]console.log(Object.getOwnPropertyNames(Person)) // OUTPUT: [ 'talk' ]
Detta verk är framtaget av Mats Loock i anslutning till kursen Grundläggande programmering (1DV021) vid Linnéuniversitetet.
Allt innehåll i detta verk förutom fotografier, ikoner, bild på kurslitteraturen samt Linnéuniversitetets logotyp och symbol,
är licensierad under en
Creative Commons Erkännande 4.0 Internationell Licens
.
Om du förändrar innehållet så ta inte med fotografier, ikoner, bild på kurslitteraturen samt Linnéuniversitetets logotyp och symbol i din nya version!
Vid all användning måste du ange källan: ”Linnéuniversitetet – Grundläggande programmering (1DV021)” och en länk till https://coursepress.lnu.se/kurs/grundlaggande-programmering och till Creative Common-licensen här ovan.
Keyboard shortcuts
↑, ←, Pg Up, k | Go to previous slide |
↓, →, Pg Dn, Space, j | Go to next slide |
Home | Go to first slide |
End | Go to last slide |
Number + Return | Go to specific slide |
b / m / f | Toggle blackout / mirrored / fullscreen mode |
c | Clone slideshow |
p | Toggle presenter mode |
t | Restart the presentation timer |
?, h | Toggle this help |
Esc | Back to slideshow |