在 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中创建一个空对象