基本思想是检查它是否以下划线开头,如果有分裂字符串并返回下划线之后的内容。此函数将运行多次,但对于不同的字符串,我不太可能需要为每次搅拌多次检索信息。
一个简单的函数,它将返回一个包含我需要的数据的对象:
var parseElementName = function(i) {
var sliced = [i.slice(0, 1), i.slice(1, i.length)];
var obj = {
isClass: null,
name: ''
}
if(sliced[0] === '_') {
obj.name = sliced[1];
obj.isClass = true;
} else {
obj.name = i;
obj.isClass = false;
}
return obj
}
使用parseElementName(i);
具有原型功能的对象
var parsedElement = function(i) {
this.className =
this.isClass = null;
if(this.setElementName(i))
return true
}
parsedElement.prototype.setElementName = function(i) {
var sliced = [i.slice(0, 1), i.slice(1, i.length)];
if(sliced[0] === '_') {
this.className = sliced[1];
this.isClass = true
} else {
this.className = i;
this.isClass = false
}
}
使用var parsed_element = new parsedElement();
调用
然后是parsed_element.className
或parsedElement.isClass
建议使用哪种方法?
答案 0 :(得分:0)
我最喜欢对象原型方法,但我对你的代码有一些注意事项:
ParsedElement
className
,因为当它不是一个类时会让人感到困惑,我会重命名它name
答案 1 :(得分:0)
这两种方式有不同的结果 - 构造函数+原型方法将产生一个具有setElementName
方法的实例。您是否需要更改现有对象的字段?它是一个简单的解析器函数,所以我假设没有。在这种情况下,您应该返回对象文字:
function parseElementName(i) {
var isClass = i.charAt(0) == '_';
return {
isClass: isClass,
name = isClass ? i.slice(1) : i
};
}
如果您以后真的需要这种方法,请考虑@ MaxMeier和@ HMR的分数。