我可以在es5中写下以下内容:
String.prototype.something=function(){
return this.split(' ').join('');
};
如何使用新功能在es6中执行相同的操作?
PS:我知道这也是一个有效的es6。我不知道在es6中是否还有其他方法可以实现更短的这些功能? 以上功能只是一个例子。答案 0 :(得分:13)
在ES6中,您也可以使用Object.assign()
这样做:
Object.assign(String.prototype, {
something() {
return this.split(' ').join();
}
});
您可以找到方法here的更多信息。
或者您可以使用defineProperty
(我认为这会更好):
Object.defineProperty(String.prototype, 'something', {
value() {
return this.split(' ').join();
}
});
请参阅文档here。
请参阅我的评论,了解何时使用defineProperty
vs Object.assign()
。
答案 1 :(得分:5)
您的提案在ES6中运行正常,它有什么问题吗?
如果您想要实际扩展String
,而不是仅仅向String
添加方法,并获得温暖的ES6感觉,您可以尝试:
class MyString extends String {
something() { return this.split(' ').join(''); }
}
但是,您将很快遇到扩展内置类的限制。有可能你会看到可怕的
TypeError: String.prototype.toString is not generic
错误消息(这是来自babel-node)。