“test”.reverse()这可能吗?

时间:2013-04-24 04:50:23

标签: javascript jquery prototype

今天与开发人员交谈,他说可以使用原型操作这样的字符串文字。任何人都可以解释这可能是怎么回事?

var myVar = "some string literal".reverse(); 
alert(myVar); 

我需要实现一些反向方法来接收警报输出(“literal string some”);

(不是寻找算法,只是我如何操作这样的字符串文字)

2 个答案:

答案 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 类似。添加这样的功能很容易被其他开发人员误解,导致代码变得笨拙。