简单扩展原生 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);
看看下面的代码,它非常不言自明。如何修改 '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);