今天与开发人员交谈,他说可以使用原型操作这样的字符串文字。任何人都可以解释这可能是怎么回事?
var myVar = "some string literal".reverse();
alert(myVar);
我需要实现一些反向方法来接收警报输出(“literal string some”);
(不是寻找算法,只是我如何操作这样的字符串文字)
答案 0 :(得分:4)
您可以创建自己的新方法,返回一个字符颠倒的新字符串。
String.prototype.reverse = function() {
return this.split("").reverse().join("");
}
工作示例:http://jsfiddle.net/jfriend00/jXA2x/
仅供参考,扩展这样的内置类型通常不是一个好主意,因为它可能在某些情况下导致问题,特别是在尝试与其他代码段进行互操作时。
如果要分割和反转单词边界或其他一些条件,则可以根据要使用的逻辑调整传递给.split()
的参数,然后相应地修改.join()
以匹配:
String.prototype.reverse = function() {
return this.split(/\b/).reverse().join(" ");
}
答案 1 :(得分:1)
覆盖基类型的原型并不是一个好主意,除非你为旧浏览器提供功能(例如使用Array.prototype.indexOf
)。
简单地创建一个反向函数是有意义的:
function reverse(str) {
return str.split(' ').reverse().join(' ');
}
可以称为:
reverse('some string literal');
并将产生
'literal some string'
但如果您真的必须通过任何字符串中的点表示法访问它,您可以在String.prototype
上设置该函数:
String.prototype.reverse = function () {
return this.split(' ').reverse().join(' ');
};
此特定reverse
方法误导性地与Array.prototype.reverse
类似。添加这样的功能很容易被其他开发人员误解,导致代码变得笨拙。