Extend a String class in ES6
In ES6 you can also do it with Object.assign()
like this:
Object.assign(String.prototype, {
something() {
return this.split(' ').join();
}
});
You can find more info to the method here.
Or you could use defineProperty
(I think that would be better here):
Object.defineProperty(String.prototype, 'something', {
value() {
return this.split(' ').join();
}
});
See the docs here.
See my comment to see when to use defineProperty
vs Object.assign()
.
Your proposal works fine in ES6, is there something wrong with it?
If you want to actually extend String
, instead of just adding a method to String
itself, and get that warm ES6 feeling, you could try:
class MyString extends String {
something() { return this.split(' ').join(''); }
}
However, you are going to quickly run into limitations on extending built-in classes. Chances are you will see the dreaded
TypeError: String.prototype.toString is not generic
error message (this is from babel-node).