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).