-
Notifications
You must be signed in to change notification settings - Fork 11
Prototypes class1 #8
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,26 +1,76 @@ | ||
| export function double ( x ) { | ||
| return x * 2; | ||
| // export function Animal () { | ||
| // | ||
| // } | ||
| // | ||
| // Animal.prototype.speak = function() { | ||
| // return 'generic sound'; | ||
| // } | ||
| // | ||
| // | ||
| // export function Reptile() { | ||
| // this.SOUND = 'reptile sound'; | ||
| // } | ||
| // | ||
| // export function Primate() { | ||
| // this.SOUND = 'primate sound'; | ||
| // } | ||
| // | ||
| // Reptile.prototype = Object.create(Animal.prototype) | ||
| // | ||
| // Reptile.prototype.speak = function () { | ||
| // return this.SOUND; | ||
| // }; | ||
| // | ||
| // | ||
| // Primate.prototype = Object.create(Animal.prototype) | ||
| // | ||
| // Primate.prototype.speak = function () { | ||
| // return this.SOUND; | ||
| // } | ||
| // | ||
| // export function Human() {} | ||
| // | ||
| // Human.prototype = Object.create(Primate.prototype) | ||
| // | ||
| // Human.prototype.speak = function (word) { | ||
| // return word | ||
| // } | ||
|
|
||
| // IN ES6 | ||
| export class Animal { | ||
| constructor() {}; | ||
|
|
||
| speak() { | ||
| return 'generic sound'; | ||
| } | ||
| } | ||
|
|
||
| export function doubleXTimes ( x, num ) { | ||
| let result = x; | ||
| export class Reptile extends Animal { | ||
|
|
||
| for ( let i = 1; i <= num; i++ ) { | ||
| // result = result * 2; | ||
| result = double( result ); | ||
| } | ||
| constructor() { | ||
| super(); | ||
| this.SOUND = 'reptile sound' | ||
| }; | ||
|
|
||
| return result; | ||
| } | ||
|
|
||
| export function doubleEach ( arr ) { | ||
| let result = arr.map( double ); | ||
| speak() { | ||
| return this.SOUND; | ||
| } | ||
| } | ||
|
|
||
| // const result = arr.map( x => double( x ) ); | ||
| // const result = arr.map( function ( x ) { | ||
| // return double( x ); | ||
| // }); | ||
| export class Primate extends Animal { | ||
| constructor() { | ||
| super(); | ||
| this.SOUND = 'primate sound' | ||
| }; | ||
|
|
||
| return result; | ||
| speak() { | ||
| return this.SOUND; | ||
| } | ||
| } | ||
|
|
||
| export class Human extends Primate { | ||
| speak(words) { | ||
| return words; | ||
| } | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,30 +1,68 @@ | ||
| import test from 'tape'; | ||
| import { double, doubleXTimes, doubleEach } from './index'; | ||
| import {Animal, Reptile, Primate, Human} from './index'; | ||
|
|
||
| test( 'double fn', function ( test ) { | ||
| const actual = double( 5 ); | ||
| const expected = 10; | ||
| test('instance', function (test) { | ||
| const animal = new Animal(); | ||
| test.ok( animal instanceof Animal, 'should create an instance of Animal' ); | ||
|
|
||
| test.equal( actual, expected, 'should double the value' ); | ||
|
|
||
| test.end(); | ||
| test.end(); | ||
| }); | ||
|
|
||
| test( 'doubleXTimes', function ( test ) { | ||
| const actual = doubleXTimes( 5, 3 ); | ||
| const expected = 40; | ||
| test('sound', function (test) { | ||
|
|
||
| test.equal( actual, expected, 'should double 5 three times' ); | ||
| const animal = new Animal(); | ||
| const expected = 'generic sound'; | ||
| const actual = animal.speak('generic sound'); | ||
|
|
||
| test.end(); | ||
| test.equal( actual, expected, 'should make a generic sound when it speaks' ); | ||
| test.end(); | ||
| }); | ||
|
|
||
| test( 'doubleEach', function ( test ) { | ||
| const actual = doubleEach([ 0, 1, 2 ]); | ||
| const expected = [ 0, 2, 4 ]; | ||
| test('reptile', function (test) { | ||
|
|
||
| let actual, expected; | ||
|
|
||
| const reptile = new Reptile(); | ||
|
|
||
| test.ok( reptile instanceof Reptile, 'should be an instance of Reptile' ); | ||
| test.ok( reptile instanceof Animal, 'should be an instance of Animal' ); | ||
|
|
||
| expected = reptile.SOUND; | ||
| actual = reptile.speak(); | ||
| test.equal( actual, expected, 'should make a reptile sound when it speaks' ); | ||
|
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This test is failing but I don't understand why.
Owner
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It is failing because you said As a first hint, if you can access it via
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Gotcha! Its should be expected = reptile.SOUND |
||
| test.end(); | ||
| }) | ||
|
|
||
| test('primate', function (test) { | ||
|
|
||
| let actual, expected; | ||
|
|
||
| const primate = new Primate(); | ||
|
|
||
| test.deepEqual( actual, expected, 'should double each in the array' ); | ||
| test.ok( primate instanceof Primate, 'should be an instance of Primate' ); | ||
| test.ok( primate instanceof Animal, 'should be an instance of Animal' ); | ||
|
|
||
| test.end(); | ||
| expected = primate.SOUND; | ||
| actual = primate.speak(); | ||
| test.equal( actual, expected, 'should make a primate sound when it speaks' ); | ||
|
|
||
| test.end(); | ||
| }); | ||
|
|
||
| test('human', function (test) { | ||
|
|
||
| let actual, expected; | ||
|
|
||
| const human = new Human(); | ||
|
|
||
| test.ok( human instanceof Human, 'should be an instance of Human' ); | ||
| test.ok( human instanceof Primate, 'should be an instance of Primate' ); | ||
| test.ok( human instanceof Animal, 'should be an instance of Animal' ); | ||
|
|
||
| const message = 'hello'; | ||
| expected = message; | ||
| actual = human.speak(message); | ||
| test.equal( actual, expected, 'should speak what it is asked to speak' ); | ||
|
|
||
| test.end(); | ||
| }); | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could you please explain what super does in the next class.