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

Posted

技术标签:

【中文标题】在 javascript 中创建一个 stringToSlug() 原型函数【英文标题】:Create a stringToSlug() prototype function in javascript 【发布时间】:2012-10-03 09:30:35 【问题描述】:

我以here 的答案为例,虽然我更喜欢这样写: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;
;

如果我像这样传递字符串,它会起作用:

var value = $(this).val();
value.stringToSlug(value);

【问题讨论】:

是否有另一种方法来获取字符串的值而不将其作为参数传递? 【参考方案1】:

如果您正在修改任何原型,您可以利用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;
;

然后这样调用:

$(this).val().stringToSlug();

【讨论】:

这是问题的正确答案,但我也建议不要这样做。这样做并没有真正的优势,而且它会降低您的代码的可移植性。 @Paul:“没有优势”和“不那么便携”是什么意思? @Paul 我总是对在 javascript 中扩展原生对象的原型感到不安 :) 我的意思是,将它附加到 String 对象的原型并不比仅仅创建一个常规函数(或你自己的对象上的函数)更好。 “不那么可移植”可能是错误的术语,我只是说如果其他人看到他的代码,那么它的意图揭示性就会降低,并且如果代码被分成多个文件,则可能容易出错。这通常也被认为是一种不好的做法,如下所述:perfectionkills.com/… @RocketHazmat 不能代表 Paul,但它将特定领域的逻辑混合到一个泛型类中;例如,字符串“Hello world”可以被“slugged”是没有意义的:)

以上是关于在 javascript 中创建一个 stringToSlug() 原型函数的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript 在JavaScript中创建一个空对象

如何在javascript类中创建一个静态字段[重复]

java中创建一个String 问题

在本机javascript中创建一个可拖动的div [重复]

在javascript中创建趋势图的库[关闭]

javascript 如何在MongoDb中创建一个集合?