创建JavaScript原型

时间:2012-01-25 17:58:13

标签: javascript

我正在尝试在JavaScript中创建一个简单的原型,从字符串中删除一个字符(如Python的条带)。这可能已经存在于JavaScript中了,但是我找不到它,这对我来说不仅仅是替代已经存在的东西。

function strip(chars) {
    this.replace(chars,"");
}

String.prototype.strip=strip;

var wrong = "Hellow";

alert(wrong.strip("w"));

当我运行此代码时,警报显示“未定义”。我的怀疑是函数中的this.但不确定。我在这里也做了一个小提琴:http://jsfiddle.net/jdb1991/rapxM/

由于

2 个答案:

答案 0 :(得分:5)

您必须指定return,以便操作的结果返回

function strip(chars) {
   return this.replace(chars,"");
}

工作演示:http://jsfiddle.net/rapxM/1/

请注意,您的代码不会删除所有字符,只删除第一次出现的。如果要删除所有字符,请使用:

function strip(chars) {
   return this.split(chars).join('');
}
  • .split根据给定的参数(返回值:数组)将字符串拆分成小块。
  • .join()是一个数组方法,它连接数组(返回值:string)

答案 1 :(得分:0)

如果您想要与Python的strip具有相同的行为,则只应从字符串的开头和结尾删除字符。这是一个使用正则表达式来实现此目的的解决方案:

function strip(chars, wholeString) {
    if (wholeString)
        chars = "(" + chars + ")*";
    else
        chars = "[" + chars + "]*";
    var pattern = "^" + chars + "|" + chars + "$";
    return this.replace(new RegExp(pattern, "g"),"");
}

如果wholeString设置为true,它会将chars视为必须一起出现的字符块(您的问题似乎要求这样做),而如果没有设置(默认值),chars中的每个字符都将被删除(如Python中)。像这样使用它:

String.prototype.strip=strip;

var str = "ababccabcccbbab";
document.write(str.strip("ab"));       // -> "ccabccc"
document.write(str.strip("ab", true)); // -> "ccabcccbb"

请注意,ab未从str的中间删除。在第一次通话中,ab会被单独处理,因此bb也会被删除。