Merge pull request #13129 from Greenheart/fix/oop-constructor-property
fix(challenge): Stricter tests for "OOP: Constructor property"
This commit is contained in:
		@@ -432,12 +432,12 @@
 | 
				
			|||||||
      "description": [
 | 
					      "description": [
 | 
				
			||||||
        "There is a special <code>constructor</code> property located on the object instances <code>duck</code> and <code>beagle</code> that were created in the previous challenges:",
 | 
					        "There is a special <code>constructor</code> property located on the object instances <code>duck</code> and <code>beagle</code> that were created in the previous challenges:",
 | 
				
			||||||
        "<blockquote>let duck = new Bird();<br>let beagle = new Dog();<br><br>console.log(duck.constructor === Bird);  //prints true<br>console.log(beagle.constructor === Dog);  //prints true</blockquote>",
 | 
					        "<blockquote>let duck = new Bird();<br>let beagle = new Dog();<br><br>console.log(duck.constructor === Bird);  //prints true<br>console.log(beagle.constructor === Dog);  //prints true</blockquote>",
 | 
				
			||||||
        "Note that the <code>constructor</code> property is the name of the constructor function that created the instance.",
 | 
					        "Note that the <code>constructor</code> property is a reference to the constructor function that created the instance.",
 | 
				
			||||||
        "The advantage of the <code>constructor</code> property is that it's possible to check for this property to find out what kind of object it is. Here's an example of how this could be used:",
 | 
					        "The advantage of the <code>constructor</code> property is that it's possible to check for this property to find out what kind of object it is. Here's an example of how this could be used:",
 | 
				
			||||||
        "<blockquote>function joinBirdFraternity(candidate) {<br>  if (candidate.constructor === Bird) {<br>    return true;<br>  } else {<br>    return false;<br>  }<br>}</blockquote>",
 | 
					        "<blockquote>function joinBirdFraternity(candidate) {<br>  if (candidate.constructor === Bird) {<br>    return true;<br>  } else {<br>    return false;<br>  }<br>}</blockquote>",
 | 
				
			||||||
        "<strong>Note</strong><br>Since the <code>constructor</code> property can be overwritten (which will be covered in the next two challenges) it’s generally better to use the <code>instanceof</code> method to check the type of an object.",
 | 
					        "<strong>Note</strong><br>Since the <code>constructor</code> property can be overwritten (which will be covered in the next two challenges) it’s generally better to use the <code>instanceof</code> method to check the type of an object.",
 | 
				
			||||||
        "<hr>",
 | 
					        "<hr>",
 | 
				
			||||||
        "Write a <code>joinDogFraternity</code> function that takes a <code>candidate</code> parameter and returns <code>true</code> if the candidate is a <code>Dog</code> and returns <code>false</code> otherwise."
 | 
					        "Write a <code>joinDogFraternity</code> function that takes a <code>candidate</code> parameter and, using the <code>constructor</code> property, return <code>true</code> if the candidate is a <code>Dog</code>, otherwise return <code>false</code>."
 | 
				
			||||||
      ],
 | 
					      ],
 | 
				
			||||||
      "challengeSeed": [
 | 
					      "challengeSeed": [
 | 
				
			||||||
        "function Dog(name) {",
 | 
					        "function Dog(name) {",
 | 
				
			||||||
@@ -452,7 +452,8 @@
 | 
				
			|||||||
      ],
 | 
					      ],
 | 
				
			||||||
      "tests": [
 | 
					      "tests": [
 | 
				
			||||||
        "assert(typeof(joinDogFraternity) === 'function', 'message: <code>joinDogFraternity</code> should be defined as a function.');",
 | 
					        "assert(typeof(joinDogFraternity) === 'function', 'message: <code>joinDogFraternity</code> should be defined as a function.');",
 | 
				
			||||||
        "assert(joinDogFraternity(new Dog(\"\")) === true, 'message: <code>joinDogFraternity</code> should return true if<code>candidate</code> is an instance of <code>Dog</code>.');"
 | 
					        "assert(joinDogFraternity(new Dog(\"\")) === true, 'message: <code>joinDogFraternity</code> should return true if<code>candidate</code> is an instance of <code>Dog</code>.');",
 | 
				
			||||||
 | 
					        "assert(/\\.constructor/.test(code) && !/instanceof/.test(code), 'message: <code>joinDogFraternity</code> should use the <code>constructor</code> property.');"
 | 
				
			||||||
      ],
 | 
					      ],
 | 
				
			||||||
      "solutions": [
 | 
					      "solutions": [
 | 
				
			||||||
        "function Dog(name) {\n  this.name = name;\n}\nfunction joinDogFraternity(candidate) {\n  return candidate.constructor === Dog;\n}"
 | 
					        "function Dog(name) {\n  this.name = name;\n}\nfunction joinDogFraternity(candidate) {\n  return candidate.constructor === Dog;\n}"
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user