Prototypal Inheritance Exercise
Add a new functionality in Date
object
Let's add a new function named lastYear
of the Date
object, that will return the 1 year earlier than current year.
Date.prototype.lastYear = function () {
return this.getFullYear() - 1;
};
new Date('1900-10-10').lastYear();
Here we use function
keyword instead of arrow
method to use dynamic-scope
instead of lexical-scope
.
When using function
keyword, the this
context is the new Date
.
But with arrow method
the this
context is the arrow method
itself, given below,
() => {
return this.getFullYear() - 1;
};
Manipulate the map
functionality of Array
Array.prototype.map = function (args) {
const newArray = [];
this.forEach(val => newArray.push(`manipulated ${val}`));
return newArray;
};
console.log([1, 2, 3].map());
This will give us output
[ 'manipulated 1', 'manipulated 2', 'manipulated 3' ]
Creating own bind
method using the apply
or call
Function.prototype.bind = function (whoIsCallingMe) {
const self = this;
return function () {
return self.apply(whoIsCallingMe, arguments);
};
};