javascript - 我可以在原型(prototype)方法中修改字符串的内容吗?

标签 javascript node.js perl

perl 有一个很棒的方法,称为 chomp()。我可以做这样的事情:

$string.chomp()

它会从末尾删除换行符。我想在 Javascript 中实现相同的功能,但不知道如何修改原型(prototype)定义中的对象:

String.prototype.chomp = function() {
   this = this.replace(/\n$/, '')
}

我无法分配给。如果我看的话,我会发现 this 是一个带有键 0 的对象,所以我尝试了 this[0] = this[0].replace(/\n$/, '') 但这也不起作用

我可以用对象来做到这一点:

Object.prototype.chomp = function() {
   Object.keys(this).forEach(k => this[k] = this[k].replace(/\n$/, ''))
}

但我无法对单个字符串执行此操作。我能施展什么魔法吗?

最佳答案

字符串是不可变的。您必须将 chomp 的结果重新分配给新字符串:

String.prototype.chomp = function() {
  return this.replace(/\n$/, '')
};

const foo = `foo
`;
const fooChomped = foo.chomp();
console.log(fooChomped);
console.log(fooChomped.length);

如果要删除字符串末尾的所有换行符,请使用 + 重复 \n:

String.prototype.chomp = function() {
  return this.replace(/\n+$/, '')
};

const foo = `foo



`;
const fooChomped = foo.chomp();
console.log(fooChomped);
console.log(fooChomped.length);

关于javascript - 我可以在原型(prototype)方法中修改字符串的内容吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56160025/

相关文章:

perl - Cwd.c : loadable library and perl binaries are mismatched (got handshake key 0xdb00080, 需要 0xde00080)

perl - 如何在受限服务器上安装 Perl 模块?

javascript - 响应 sendRedirect 不适用于 AJAX 请求

javascript - Nodejs 在 Bluebird Promise 中执行 mongodb 命令

angularjs - 我想使用node.js将数据写入mongodb数据库

javascript - Q.js, promises, classes 和 "this",上下文是什么?

java - Perl 共享变量的原子性和可见性

javascript - 始终为textareaexpader调用pluginjquery的函数

javascript - js onClick="window.open 父加载基础 url

javascript - 使用返回的视口(viewport)查询作为 SASS 变量