在es6中扩展String类

rit*_*078 7 javascript string ecmascript-6

我可以在es5中写下以下内容:

String.prototype.something=function(){
  return this.split(' ').join('');
};
Run Code Online (Sandbox Code Playgroud)

如何使用新功能在es6中执行相同的操作?

PS:我知道这也是一个有效的es6.我不知道在es6中是否还有其他方法可以实现更短的这些功能?以上功能只是一个例子.

AWo*_*olf 14

在ES6中你也可以这样做Object.assign():

Object.assign(String.prototype, {
    something() {
        return this.split(' ').join();
    }
});
Run Code Online (Sandbox Code Playgroud)

您可以在此处找到有关此方法的更多信息.

或者你可以使用defineProperty(我认为这会更好):

Object.defineProperty(String.prototype, 'something', {
    value() {
        return this.split(' ').join();
    }
});
Run Code Online (Sandbox Code Playgroud)

请参阅此处的文档.

见我的评论看的时候使用definePropertyVS Object.assign().


小智 5

您的建议在ES6中运行良好,它有什么问题吗?

如果你想实际扩展String,而不是仅仅为String自己添加一个方法,并获得温暖的ES6感觉,你可以尝试:

class MyString extends String {
    something() { return this.split(' ').join(''); }
}
Run Code Online (Sandbox Code Playgroud)

但是,您将很快遇到扩展内置类的限制.有可能你会看到可怕的

TypeError: String.prototype.toString is not generic
Run Code Online (Sandbox Code Playgroud)

错误消息(这是来自babel-node).