简单扩展Native JS

时间:2016-04-08 08:13:22

标签: javascript inheritance native

看看下面的代码,这是非常明显的。如何修改'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"

1 个答案:

答案 0 :(得分:4)

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

另一种方法是返回包含替换字符和新字符串的对象或数组。然后将值分配给变量' 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',你实际上可以把它归结为oneliner:

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);