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
€87.80
List Price:  €122.93
You save:  €35.12
£75.76
List Price:  £106.06
You save:  £30.30
CA$138.60
List Price:  CA$194.05
You save:  CA$55.44
A$158.27
List Price:  A$221.58
You save:  A$63.31
S$131.54
List Price:  S$184.17
You save:  S$52.62
HK$775.43
List Price:  HK$1,085.63
You save:  HK$310.20
CHF 81.88
List Price:  CHF 114.64
You save:  CHF 32.75
NOK kr1,053.73
List Price:  NOK kr1,475.27
You save:  NOK kr421.53
DKK kr655.70
List Price:  DKK kr918
You save:  DKK kr262.30
NZ$170.29
List Price:  NZ$238.41
You save:  NZ$68.12
د.إ367.26
List Price:  د.إ514.18
You save:  د.إ146.91
৳12,124.13
List Price:  ৳16,974.27
You save:  ৳4,850.13
₹8,602.32
List Price:  ₹12,043.60
You save:  ₹3,441.27
RM441.45
List Price:  RM618.05
You save:  RM176.60
₦159,858.01
List Price:  ₦223,807.61
You save:  ₦63,949.60
₨27,976.39
List Price:  ₨39,168.07
You save:  ₨11,191.67
฿3,356.63
List Price:  ฿4,699.42
You save:  ฿1,342.79
₺3,803.75
List Price:  ₺5,325.41
You save:  ₺1,521.65
B$586.51
List Price:  B$821.13
You save:  B$234.62
R1,891.46
List Price:  R2,648.12
You save:  R756.66
Лв171.72
List Price:  Лв240.42
You save:  Лв68.69
₩142,095.84
List Price:  ₩198,939.86
You save:  ₩56,844.02
₪368.50
List Price:  ₪515.91
You save:  ₪147.41
₱5,698.03
List Price:  ₱7,977.47
You save:  ₱2,279.44
¥14,308.41
List Price:  ¥20,032.35
You save:  ¥5,723.94
MX$2,017.34
List Price:  MX$2,824.36
You save:  MX$807.02
QR363.82
List Price:  QR509.37
You save:  QR145.54
P1,391.70
List Price:  P1,948.43
You save:  P556.73
KSh12,953.70
List Price:  KSh18,135.70
You save:  KSh5,182
E£5,098.49
List Price:  E£7,138.09
You save:  E£2,039.60
ብር12,965.78
List Price:  ብር18,152.61
You save:  ብር5,186.83
Kz91,590.84
List Price:  Kz128,230.84
You save:  Kz36,640
CLP$98,513.09
List Price:  CLP$137,922.28
You save:  CLP$39,409.18
CN¥731.14
List Price:  CN¥1,023.63
You save:  CN¥292.48
RD$6,162.84
List Price:  RD$8,628.23
You save:  RD$2,465.38
DA13,253.16
List Price:  DA18,554.95
You save:  DA5,301.79
FJ$230.87
List Price:  FJ$323.23
You save:  FJ$92.36
Q769.60
List Price:  Q1,077.48
You save:  Q307.87
GY$20,875.51
List Price:  GY$29,226.56
You save:  GY$8,351.04
ISK kr12,723.72
List Price:  ISK kr17,813.72
You save:  ISK kr5,090
DH928.28
List Price:  DH1,299.63
You save:  DH371.34
L1,772.25
List Price:  L2,481.22
You save:  L708.97
ден5,403.40
List Price:  ден7,564.98
You save:  ден2,161.57
MOP$797.12
List Price:  MOP$1,116
You save:  MOP$318.88
N$1,924.94
List Price:  N$2,694.99
You save:  N$770.05
C$3,672
List Price:  C$5,140.95
You save:  C$1,468.94
रु13,744.93
List Price:  रु19,243.46
You save:  रु5,498.52
S/372.43
List Price:  S/521.42
You save:  S/148.98
K412.35
List Price:  K577.31
You save:  K164.95
SAR375.25
List Price:  SAR525.37
You save:  SAR150.11
ZK2,816.31
List Price:  ZK3,942.96
You save:  ZK1,126.64
L437.08
List Price:  L611.93
You save:  L174.85
Kč2,205.04
List Price:  Kč3,087.15
You save:  Kč882.10
Ft36,028.08
List Price:  Ft50,440.75
You save:  Ft14,412.67
SEK kr965.56
List Price:  SEK kr1,351.83
You save:  SEK kr386.26
ARS$107,493.50
List Price:  ARS$150,495.21
You save:  ARS$43,001.70
Bs689.51
List Price:  Bs965.34
You save:  Bs275.83
COP$431,194.18
List Price:  COP$603,689.10
You save:  COP$172,494.92
₡51,198.67
List Price:  ₡71,680.18
You save:  ₡20,481.51
L2,585.19
List Price:  L3,619.37
You save:  L1,034.17
₲798,314.22
List Price:  ₲1,117,671.85
You save:  ₲319,357.62
$U4,293.83
List Price:  $U6,011.54
You save:  $U1,717.70
zł375.78
List Price:  zł526.11
You save:  zł150.32
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.