在javascript中创建一个stringToSlug()原型函数

Joh*_*lia 2 javascript jquery

我在这里使用了答案作为例子,虽然我更喜欢这样写:value.stringToSlug()

所以我把它改成了这个:

// String to slug
String.prototype.stringToSlug = function(str) {
      str = str.replace(/^\s+|\s+$/g, ''); // trim
      str = str.toLowerCase();
      str = str.replace(/[^a-z0-9 -]/g, '') // remove invalid chars
               .replace(/\s+/g, '-') // collapse whitespace and replace by -
               .replace(/-+/g, '-'); // collapse dashes
      return str;
};
Run Code Online (Sandbox Code Playgroud)

如果我像这样传递字符串,它可以工作:

var value = $(this).val();
value.stringToSlug(value);
Run Code Online (Sandbox Code Playgroud)

Ja͢*_*͢ck 11

如果您正在修改任何原型,您可以利用this引用对象本身的事实; 在这种情况下,它指向您正在调用方法的字符串:

String.prototype.stringToSlug = function() { // <-- removed the argument
    var str = this; // <-- added this statement

      str = str.replace(/^\s+|\s+$/g, ''); // trim
      str = str.toLowerCase();
      str = str.replace(/[^a-z0-9 -]/g, '') // remove invalid chars
               .replace(/\s+/g, '-') // collapse whitespace and replace by -
               .replace(/-+/g, '-'); // collapse dashes
      return str;
};
Run Code Online (Sandbox Code Playgroud)

然后像这样打电话:

$(this).val().stringToSlug();
Run Code Online (Sandbox Code Playgroud)

  • 我的意思是,将它附加到String对象的原型并不比仅仅创建一个常规函数(或在您自己的对象上的函数)更好."不那么便携"可能是错误的术语,我只是意味着,如果其他人看到他的代码,那么它的意图不太明显,并且如果代码被分解成多个文件,则可能容易出错.它通常被认为是一种不好的做法,如下所述:http://perfectionkills.com/extending-built-in-native-objects-evil-or-not/ (2认同)