When They "feel" the Same - Code - Part 4

What’s the Difference Between Scope and Context in JavaScript? When Scope and Context "feel" like the same thing (but they are not)
5 minutes
Share the link to this page
Copied
  Completed
You need to have access to the item to view this lesson.
One-time Fee
$99.99
List Price:  $139.99
You save:  $40
€93.20
List Price:  €130.49
You save:  €37.28
£79.91
List Price:  £111.88
You save:  £31.96
CA$136.56
List Price:  CA$191.19
You save:  CA$54.63
A$153.05
List Price:  A$214.27
You save:  A$61.22
S$136.08
List Price:  S$190.51
You save:  S$54.43
HK$782.75
List Price:  HK$1,095.88
You save:  HK$313.13
CHF 91.21
List Price:  CHF 127.70
You save:  CHF 36.49
NOK kr1,100.23
List Price:  NOK kr1,540.37
You save:  NOK kr440.13
DKK kr695.05
List Price:  DKK kr973.10
You save:  DKK kr278.04
NZ$168.07
List Price:  NZ$235.31
You save:  NZ$67.23
د.إ367.25
List Price:  د.إ514.16
You save:  د.إ146.91
৳10,970.75
List Price:  ৳15,359.49
You save:  ৳4,388.74
₹8,335.10
List Price:  ₹11,669.48
You save:  ₹3,334.37
RM476.90
List Price:  RM667.68
You save:  RM190.78
₦130,608.93
List Price:  ₦182,857.73
You save:  ₦52,248.80
₨27,840.21
List Price:  ₨38,977.41
You save:  ₨11,137.19
฿3,694.31
List Price:  ฿5,172.18
You save:  ฿1,477.87
₺3,253.72
List Price:  ₺4,555.34
You save:  ₺1,301.61
B$515.88
List Price:  B$722.26
You save:  B$206.37
R1,886.05
List Price:  R2,640.54
You save:  R754.49
Лв182.13
List Price:  Лв254.99
You save:  Лв72.85
₩137,567.94
List Price:  ₩192,600.62
You save:  ₩55,032.68
₪380.78
List Price:  ₪533.11
You save:  ₪152.32
₱5,769.12
List Price:  ₱8,077
You save:  ₱2,307.87
¥15,680.08
List Price:  ¥21,952.74
You save:  ¥6,272.66
MX$1,724.22
List Price:  MX$2,413.98
You save:  MX$689.75
QR364.68
List Price:  QR510.56
You save:  QR145.88
P1,379.77
List Price:  P1,931.74
You save:  P551.96
KSh13,498.65
List Price:  KSh18,898.65
You save:  KSh5,400
E£4,789.68
List Price:  E£6,705.74
You save:  E£1,916.06
ብር5,693.24
List Price:  ብር7,970.76
You save:  ብር2,277.52
Kz83,560.30
List Price:  Kz116,987.77
You save:  Kz33,427.46
CLP$94,840.51
List Price:  CLP$132,780.51
You save:  CLP$37,940
CN¥724.59
List Price:  CN¥1,014.46
You save:  CN¥289.86
RD$5,873.12
List Price:  RD$8,222.61
You save:  RD$2,349.48
DA13,427.17
List Price:  DA18,798.58
You save:  DA5,371.40
FJ$225.97
List Price:  FJ$316.37
You save:  FJ$90.39
Q777.73
List Price:  Q1,088.86
You save:  Q311.12
GY$20,914.34
List Price:  GY$29,280.91
You save:  GY$8,366.57
ISK kr13,988.60
List Price:  ISK kr19,584.60
You save:  ISK kr5,596
DH1,011.63
List Price:  DH1,416.33
You save:  DH404.69
L1,776.81
List Price:  L2,487.61
You save:  L710.79
ден5,738.79
List Price:  ден8,034.54
You save:  ден2,295.74
MOP$805.67
List Price:  MOP$1,127.97
You save:  MOP$322.30
N$1,914.68
List Price:  N$2,680.63
You save:  N$765.95
C$3,678.96
List Price:  C$5,150.69
You save:  C$1,471.73
रु13,310.19
List Price:  रु18,634.81
You save:  रु5,324.61
S/372.97
List Price:  S/522.18
You save:  S/149.20
K385.04
List Price:  K539.08
You save:  K154.03
SAR375.02
List Price:  SAR525.04
You save:  SAR150.02
ZK2,631.59
List Price:  ZK3,684.33
You save:  ZK1,052.74
L463.78
List Price:  L649.31
You save:  L185.53
Kč2,343.96
List Price:  Kč3,281.64
You save:  Kč937.68
Ft36,581.40
List Price:  Ft51,215.43
You save:  Ft14,634.02
SEK kr1,089.92
List Price:  SEK kr1,525.94
You save:  SEK kr436.01
ARS$87,365.86
List Price:  ARS$122,315.70
You save:  ARS$34,949.84
Bs692.26
List Price:  Bs969.20
You save:  Bs276.93
COP$394,057.74
List Price:  COP$551,696.60
You save:  COP$157,638.86
₡50,249.28
List Price:  ₡70,351
You save:  ₡20,101.72
L2,468.18
List Price:  L3,455.56
You save:  L987.37
₲742,598.03
List Price:  ₲1,039,666.95
You save:  ₲297,068.91
$U3,834.62
List Price:  $U5,368.62
You save:  $U1,534
zł402.81
List Price:  zł563.95
You save:  zł161.14
Already have an account? Log In

Transcript

Okay, let's look at an example ie the one that's titled foo is now a constructor. So on line 49, I have the Foo function. But you may notice that I've used a capital F when I named foo, not just lowercase fo but capital fo and that doesn't essentially change anything. But it's a convention that most programmers use that you want to capitalize the first letter of a function when you want it to be a constructor. And I do want it to be constructed because on line 56, I'm not just executing foo, I'm instantiating. It I'm saying var foo equals new foo.

And if you've worked with constructor func constructor functions in all JavaScript, you know that when you instantiate a constructor, you do execute it. So foo will be executed. But it's a little bit different because bar, the value bar winds up being the instance of the Foo class. foo is essentially acting as a class here. In bar is going to get an instance of the class. So inside of our controller After I create a speed variable to private to that constructor, and I alert this dot speed.

So let's execute this code in our console. And we'll see what what happens. So I alert it and I get undefined. Why is that? Well, if we go back to the code, will I, my first thought might have been that, well, I create the speed variable. So when I'm instantiating, foo, shouldn't the execution of food produce an instance of foo?

Well, it should. But the problem is that you may think that the word this references the instance of foo, and it does, it's true through the bar. This equals bar meaning that when you instantiate foo using bar, this keyword inside of the constructor references the instance has been returned so that that's true, but speed is not a problem. of the constructor. It's a variable. And that's one of the areas where scope and context can feel like the same thing.

But in this case, they're very much not the same thing. Speed is a variable when you think variables you think scope. But in this case, we're, we're trying to reference a we're trying to reference the speed property of this variable. But of this instance, but the instance doesn't have a speed variable. It has a speed doesn't have a speed property has a speed variable. So this dot speed is essentially undefined.

If I were to say let's see. Let's see return. Speed 5000. And then I alert bar dot speed. This should work. So let's copy this code and paste it and we get 5000.

The reason we get 5000 is because now the class food does have a screen Property Bar winds up with speed property. In fact, if I were to do a console d'oeuvre I will just type bar and in the console, I see I get an object with a speed property. So in that case, it would work. Now, the instance of food does have a speed property. Another way to do this would be if I wanted to keep the alert inside the constructor, I could say foo dot pro prototype, dot speed equal So let's say 10,000, just to prove our case here, so I'm gonna refresh the page. And oops, I should have said that.

See, there you go, typo. Okay, so let's refresh the page. And now I get 10,000. And the reason is because even though I don't declare a speed property when I create the constructor, as soon as I create the constructor, I create a speed property on the prototype object. Now, prototyping is again, that's that's, that's fuel for a whole nother class. But the point here is that I'm extending the constructor here, with I'm giving it a prototype aren't giving putting up a speed property on its prototype object, which means that when I instantiate foo bar will have a speed property.

So this dot speed does resolve to 10,000 So, but the original question did not have a prototype and it the reason why we got undefined is because this class constructor has a speed variable but not a speed property.

Sign Up

Share

Share with friends, get 20% off
Invite your friends to LearnDesk learning marketplace. For each purchase they make, you get 20% off (upto $10) on your next purchase.