简单扩展原生 JS

Simple Extending Native JS

看看下面的代码,它非常不言自明。如何修改 'replaceAt' 函数以获得所需的结果?

String.prototype.replaceAt = function (at) {
    return this.substring(0, at) + this.substring(at+1, this.length);   
}

var str = "webmaster";

var x = str.replaceAt(2);
console.log(x); // should return "b"
console.log(str); // should return "wemaster"

你不能,字符串是不可变的。

另一种方法是 return 包含被替换字符和新字符串的对象或数组。然后分别给变量'x'和'str'赋值:

String.prototype.replaceAt = function (at) {
    return {
       x: this.substring(at+1, at),
       str: this.substring(0, at) + this.substring(at+1, this.length)
    }   
};

var str = "webmaster";
var result = str.replaceAt(2);
var x = result.x;
str = result.str;

console.log(x);
console.log(str);

但是,利用 ES6 特性 'destructuring',您实际上可以将其简化为一个单行代码:

String.prototype.replaceAt = function (at) {
    return [
       this.substring(at+1, at),
       this.substring(0, at) + this.substring(at+1, this.length)
    ]
};

var str = "webmaster";
[x, str] = str.replaceAt(2);

console.log(x);
console.log(str);