2.5 KiB
2.5 KiB
id, title, challengeType
id | title | challengeType |
---|---|---|
587d7dad367417b2b2512b76 | Make Code More Reusable with the this Keyword | 1 |
Description
method
to the duck
object. It used duck.name
dot notation to access the value for the name
property within the return statement:
sayName: function() {return "The name of this duck is " + duck.name + ".";}
While this is a valid way to access the object's property, there is a pitfall here. If the variable name changes, any code referencing the original name would need to be updated as well. In a short object definition, it isn't a problem, but if an object has many references to its properties there is a greater chance for error.
A way to avoid these issues is with the this
keyword:
let duck = {
name: "Aflac",
numLegs: 2,
sayName: function() {return "The name of this duck is " + this.name + ".";}
};
this
is a deep topic, and the above example is only one way to use it. In the current context, this
refers to the object that the method is associated with: duck
.
If the object's name is changed to mallard
, it is not necessary to find all the references to duck
in the code. It makes the code reusable and easier to read.
Instructions
dog.sayLegs
method to remove any references to dog
. Use the duck
example for guidance.
Tests
- text: <code>dog.sayLegs()</code> should return the given string.
testString: 'assert(dog.sayLegs() === "This dog has 4 legs.", "<code>dog.sayLegs()</code> should return the given string.");'
- text: Your code should use the <code>this</code> keyword to access the <code>numLegs</code> property of <code>dog</code>.
testString: 'assert(code.match(/this\.numLegs/g), "Your code should use the <code>this</code> keyword to access the <code>numLegs</code> property of <code>dog</code>.");'
Challenge Seed
let dog = {
name: "Spot",
numLegs: 4,
sayLegs: function() {return "This dog has " + dog.numLegs + " legs.";}
};
dog.sayLegs();
Solution
let dog = {
name: "Spot",
numLegs: 4,
sayLegs () {
return 'This dog has ' + this.numLegs + ' legs.';
}
};
dog.sayLegs();