I can write the following in ES5:
String.prototype.something=function(){
return this.split(' ').join('');
};
How do I do the same thing in ES6 using the new features?
I know that this is also a valid ES6. I want to know whether there's any other way of implementing such functions in ES6 which is shorter?
The above function is just an example.
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()
.
What is the difference? What is the advantage? Why would he want to do this anyway instead of using
defineProperty
?Yes, you're right defineProperty would be better here. See this blog post. Especially the conclusion summarizes it pretty well. I'll add it to my answer in a minute.
Isn't
defineProperty
ES5 code? I really don't see how ES6 provides a better method of extendingString
than that (apart from subclassing).So that means that es5 is still the best method to implement such functions.