Javascript 带有原型函数的新对象与返回对象的常规函数

Javascript 带有原型函数的新对象与返回对象的常规函数,javascript,node.js,Javascript,Node.js,基本思想是检查它是否以下划线开头,以及是否拆分字符串并返回下划线后面的内容。此函数将运行多次,但对于不同的字符串,我不太可能需要为每个stirng多次检索信息 一个简单的函数,它将返回一个包含我需要的数据的对象: var parseElementName = function(i) { var sliced = [i.slice(0, 1), i.slice(1, i.length)]; var obj = { isClass: null,

基本思想是检查它是否以下划线开头,以及是否拆分字符串并返回下划线后面的内容。此函数将运行多次,但对于不同的字符串,我不太可能需要为每个stirng多次检索信息

一个简单的函数,它将返回一个包含我需要的数据的对象:

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_元素.className
parsedElement.isClass


推荐哪种方法?

我最喜欢对象原型方法,但我对您的代码有几点注意:

  • 在每行末尾使用分号
  • 类名应该大写。所以它应该是
    ParsedElement
  • 我不会称它为
    className
    ,因为当它不是类时会让人困惑,我会将它重命名为
    name

  • 这两种方法有不同的结果——构造函数+原型方法将产生一个实例,该实例具有
    setElementName
    方法。更改现有对象的字段时是否需要此选项?这是一个简单的解析器函数,因此我假设不是。在这种情况下,您应该返回对象文本:

    function parseElementName(i) {
        var isClass = i.charAt(0) == '_';
        return {
            isClass: isClass,
            name = isClass ? i.slice(1) : i
        };
    }
    

    如果您真的需要以后的方法,请考虑@ Max MeIle和@ HMR点。

    为什么在构造函数中有一个IF语句,它将永远不会返回真?你也可以做
    this.setElementName(i)
    而不是
    if(this.setElementName(i))
    ,因为setElementName不返回任何东西,所以if语句永远不会为真。是的,很抱歉在修改代码的中途发布了此消息,之前它返回了一些东西。