101 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			101 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|   | --- | ||
|  | id: 587d7b8b367417b2b2512b53 | ||
|  | title: Use class Syntax to Define a Constructor Function | ||
|  | challengeType: 1 | ||
|  | forumTopicId: 301212 | ||
|  | dashedName: use-class-syntax-to-define-a-constructor-function | ||
|  | --- | ||
|  | 
 | ||
|  | # --description--
 | ||
|  | 
 | ||
|  | ES6 provides a new syntax to create objects, using the <dfn>class</dfn> keyword. | ||
|  | 
 | ||
|  | It should be noted that the `class` syntax is just syntax, and not a full-fledged class-based implementation of an object-oriented paradigm, unlike in languages such as Java, Python, Ruby, etc. | ||
|  | 
 | ||
|  | In ES5, we usually define a `constructor` function and use the `new` keyword to instantiate an object. | ||
|  | 
 | ||
|  | ```js | ||
|  | var SpaceShuttle = function(targetPlanet){ | ||
|  |   this.targetPlanet = targetPlanet; | ||
|  | } | ||
|  | var zeus = new SpaceShuttle('Jupiter'); | ||
|  | ``` | ||
|  | 
 | ||
|  | The `class` syntax simply replaces the `constructor` function creation: | ||
|  | 
 | ||
|  | ```js | ||
|  | class SpaceShuttle { | ||
|  |   constructor(targetPlanet) { | ||
|  |     this.targetPlanet = targetPlanet; | ||
|  |   } | ||
|  | } | ||
|  | const zeus = new SpaceShuttle('Jupiter'); | ||
|  | ``` | ||
|  | 
 | ||
|  | It should be noted that the `class` keyword declares a new function, to which a constructor is added. This constructor is invoked when `new` is called to create a new object. | ||
|  | 
 | ||
|  | **Note:** UpperCamelCase should be used by convention for ES6 class names, as in `SpaceShuttle` used above. | ||
|  | 
 | ||
|  | The `constructor` method is a special method for creating and initializing an object created with a class. You will learn more about it in the Object Oriented Programming section of the JavaScript Algorithms And Data Structures Certification. | ||
|  | 
 | ||
|  | # --instructions--
 | ||
|  | 
 | ||
|  | Use the `class` keyword and write a `constructor` to create the `Vegetable` class. | ||
|  | 
 | ||
|  | The `Vegetable` class allows you to create a vegetable object with a property `name` that gets passed to the `constructor`. | ||
|  | 
 | ||
|  | # --hints--
 | ||
|  | 
 | ||
|  | `Vegetable` should be a `class` with a defined `constructor` method. | ||
|  | 
 | ||
|  | ```js | ||
|  | assert( | ||
|  |   typeof Vegetable === 'function' && typeof Vegetable.constructor === 'function' | ||
|  | ); | ||
|  | ``` | ||
|  | 
 | ||
|  | The `class` keyword should be used. | ||
|  | 
 | ||
|  | ```js | ||
|  | assert(code.match(/class/g)); | ||
|  | ``` | ||
|  | 
 | ||
|  | `Vegetable` should be able to be instantiated. | ||
|  | 
 | ||
|  | ```js | ||
|  | assert(() => { | ||
|  |   const a = new Vegetable('apple'); | ||
|  |   return typeof a === 'object'; | ||
|  | }); | ||
|  | ``` | ||
|  | 
 | ||
|  | `carrot.name` should return `carrot`. | ||
|  | 
 | ||
|  | ```js | ||
|  | assert(carrot.name == 'carrot'); | ||
|  | ``` | ||
|  | 
 | ||
|  | # --seed--
 | ||
|  | 
 | ||
|  | ## --seed-contents--
 | ||
|  | 
 | ||
|  | ```js | ||
|  | // Only change code below this line | ||
|  | 
 | ||
|  | // Only change code above this line | ||
|  | 
 | ||
|  | const carrot = new Vegetable('carrot'); | ||
|  | console.log(carrot.name); // Should display 'carrot' | ||
|  | ``` | ||
|  | 
 | ||
|  | # --solutions--
 | ||
|  | 
 | ||
|  | ```js | ||
|  | class Vegetable { | ||
|  |   constructor(name) { | ||
|  |     this.name = name; | ||
|  |   } | ||
|  | } | ||
|  | const carrot = new Vegetable('carrot'); | ||
|  | ``` |